
    XjJ              
       4   d dl m Z  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mZ d dlmZmZ d dlmZ d d	lmZ  e
e          Z e            Z G d
 de          Z G d de          Z G d de          Z G d de          ZddddZdedefdZdededefdZe                     de!e                   dd ee           ee          fdedz  dedz  ded efd!            Z"e                     d"           ee           ee          fdeded efd#            Z#e                     d$e           ee           ee          fdeded efd%            Z$e                     d&e!e                    ee           ee          fdeded efd'            Z%e                     d(e!e                    ee           ee          fdeded efd)            Z&e'                    d$           ee           ee          fded*eded efd+            Z(e)                    d,           ee           ee          fdeded efd-            Z*e)                    d.           ee           ee          fdeded efd/            Z+dS )0    )datetime)	APIRouterDependsHTTPException)FileResponse)	BaseModel)
get_logger)Session)get_current_userget_db)KnowledgeDocument)Userc                   z    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   dZedz  ed<    G d	 d
          ZdS )CalibrationFileidtitlefilenametypestatus
uploadedAtN	modelTypec                       e Zd ZdZdS )CalibrationFile.ConfigTN)__name__
__module____qualname__from_attributes     A/lsinfo/ai/hellotax_ai/base_platform/app/api/v1/ai/calibration.pyConfigr      s        r   r!   )r   r   r   str__annotations__r   r!   r   r   r    r   r      s         GGGJJJMMM
IIIKKKOOO IsTz            r   r   c                       e Zd ZU dZeed<   dZeed<   dZedz  ed<   g Ze	e         ed<   dZ
edz  ed<   dZedz  ed<   dS )	DocumentMetadata documentNumbervalidityStartNvalidityEndissuingAuthoritiesaiConfidence
lastParsed)r   r   r   r'   r"   r#   r(   r)   r*   listr+   floatr,   r   r   r    r%   r%      s         NCM3"Kt"""$&S	&&&!%L%$,%%%!Jd
!!!!!r   r%   c                   V    e Zd ZU eed<   eed<   eed<   dZedz  ed<   dZedz  ed<   dS )DocumentChunkr   indexcontentNlabel
pageNumber)r   r   r   r"   r#   intr3   r4   r   r   r    r0   r0   '   sU         GGGJJJLLLE3:!Jd
!!!!!r   r0   c                   8    e Zd ZU eed<   eed<   eed<   eed<   dS )KnowledgeRelationr   r   r   targetIdN)r   r   r   r"   r#   r   r   r    r7   r7   /   s4         GGG
IIIJJJMMMMMr   r7   syncedpending)	publisheddraftarchiveddocreturnc                 0   t          | j                  | j        | j        r | j                            d          d         n| j        | j        pdt                              | j        d          | j	        r| j	        
                                nd| j        dS )N/sopr:   r&   )r   r   r   r   r   r   r   )r"   r   r   	file_pathsplit	file_type
STATUS_MAPgetr   
created_at	isoformatvector_model)r>   s    r    _to_calibration_filerL   9   s    #&kk47MPCM'',,R00sy&..Y7747NJcn..000%  r   dbfile_idc                 2   |                      t                                        t          j        t	          |          k    t          j                                                   }|s.t                              d|            t          dd          |S )NzFile not found: file_id=  zFile not foundstatus_codedetail)
queryr   filterr   r5   
is_deletedfirstloggerwarningr   )rM   rN   r>   s      r    _get_docrZ   E   s    
"##	!$G4:K:V6V	W	W	 
  F;';;<<<4DEEEEJr   z/files)response_modelNr   r   current_userc                   K   t                               d|  d| d|j                    |                    t                                        t          j                   }|j        r(|                    t          j        |j        k              }| r#|                    t          j        | k              }|	                                }t                               dt          |           d           d |D             S )Nz!Fetching calibration files: type=z	, status=, user=zFound z calibration filesc                 ,    g | ]}t          |          S r   )rL   ).0ds     r    
<listcomp>zget_files.<locals>.<listcomp>`   s!    333 ##333r   )rX   infor   rT   r   rU   rV   	tenant_idrF   alllen)r   r   rM   r\   rT   filess         r    	get_filesrh   Q   s       KKcDcc6ccR^RaccdddHH&''..3D3O/OPPE T.8L<RRSS B.8D@AAIIKKE
KK7U77788833U3333r   z/files/{file_id}/contentc                   K   dd l }ddlm} t                              d|  d|j                    t          ||           }|j        r3|j        	                    |j                  rt          |j                  S |j        r |d|j        |j        pdd          S t                              d|             t          d	d
          )Nr   )JSONResponsezFetching file content: file_id=r^   texttxt)r   r2   rF   z'No content available for file: file_id=rP   zNo content availablerQ   )osfastapi.responsesrj   rX   rc   r   rZ   rD   pathexistsr   r2   rF   rY   r   )rN   rM   r\   rm   rj   r>   s         r    get_file_contentrq   c   s       III......
KKS'SS,/SSTTT
2w

C
} +66 +CM***
{ 
|#-BXSXYY
 
 	
 NNFWFFGGG
C0F
G
G
GGr   z/files/{file_id}/metadatac                    K   t          ||           }t          |j        pd|j        r|j                                        nd|j        r|j                                        nd           S )Nr&   )r'   r(   r,   )rZ   r%   sourcerI   rJ   
updated_atrN   rM   r\   r>   s       r    get_metadatarv   w   sr       2w

Cz'R47NJcn..00014I3>++---T   r   z/files/{file_id}/chunksc                 h   K   t          ||           }d t          |j        d           D             S )Nc                 j    g | ]0}t          t          |j                  |j        |j                   1S ))r   r1   r2   )r0   r"   r   chunk_index
chunk_text)r`   vs     r    rb   zget_chunks.<locals>.<listcomp>   sC        	QT!-NNN  r   c                     | j         S N)ry   )xs    r    <lambda>zget_chunks.<locals>.<lambda>   s    1= r   )key)rZ   sortedvectorsru   s       r    
get_chunksr      sK       2w

C )@)@AAA   r   z/files/{file_id}/relationsc                 *   K   t          ||            g S r}   )rZ   )rN   rM   r\   s      r    get_relationsr      s       RIr   metadatac                    K   t          ||           }|j        |_        t          j                    |_        |                                 ddiS )NokT)rZ   r'   rs   r   utcnowrt   commit)rN   r   rM   r\   r>   s        r    update_metadatar      sG       2w

C(CJ_&&CNIIKKK$<r   z/files/{file_id}/publishc                   K   t                               d|  d|j                    t          ||           }d|_        t          j                    |_        |                                 t                               d|             ddiS )NzPublishing file: file_id=r^   r;   zFile published: file_id=r   T)	rX   rc   r   rZ   r   r   r   rt   r   ru   s       r    publish_filer      s       KKMGMMLOMMNNN
2w

CCJ_&&CNIIKKK
KK4744555$<r   z/files/{file_id}/invalidatec                    K   t          ||           }d|_        t          j                    |_        |                                 ddiS )Nr=   r   T)rZ   r   r   r   rt   r   ru   s       r    invalidate_filer      sD       2w

CCJ_&&CNIIKKK$<r   ),r   fastapir   r   r   rn   r   pydanticr   common_loggingr	   sqlalchemy.ormr
   app.api.depsr   r   app.models.knowledge_baser   app.models.userr   r   rX   routerr   r%   r0   r7   rG   dictrL   r"   rZ   rH   r-   rh   rq   rv   r   r   putr   postr   r   r   r   r    <module>r      sP         5 5 5 5 5 5 5 5 5 5 * * * * * *       % % % % % % " " " " " " 1 1 1 1 1 1 1 1 7 7 7 7 7 7            	H			
 
 
 
 
i 
 
 
" " " " "y " " "" " " " "I " " "    	    $iYOO
	/ 	D 	 	 	 		 	3 	+< 	 	 	 	 HT/%:;;'&// !122	4 4
*4$J4 	4 	4 4 4 <;4" &'' 'ggN^F_F_H HHH?CH H H ('H& '8HII 'ggN^F_F_ ?C   JI %d=6IJJ 'ggN^F_F_ ?C   KJ (>O9PQQ 'ggN^F_F_ ?C   RQ '(( '&// !122	
 


 	
 	
 
 
 )(
 '(( 'ggN^F_F_	 			?C	 	 	 )(	 *++ 'ggN^F_F_ ?C   ,+  r   