o
    g                     @   s0  d Z ddlZddlZddlmZmZ ddlmZmZm	Z	m
Z
mZmZmZ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 dd
lmZmZmZmZmZ ddl m!Z! ddl"m#Z# ddl$m%Z%m&Z& e' Z(eddgdddiig dZ)e)*de
dededfdee de+de+fddZ,e)-dedfde+de+fddZ.e)*dedededfdede+de+d ee+ fd!d"Z/e)-d#dede+de+fd$d%Z0e)-d&dede+de+fd'd(Z1e)-d)d7d+e+d,e2d-e2fd.d/Z3e)*d0ded+e+fd1d2Z4e)*d3ded+e+d4efd5d6Z5dS )8zdocchat router    N)	AnnotatedList)
	APIRouterBodyDependsFileHTTPExceptionQueryRequestr   
UploadFilestatus)Project)TeamService)ChatDocumentUploader)mysql_db)DocUploaderV2)ChatMessageCreateChatMessageResponseChatSessionCreateChatSessionResponseUpdateChatSessionPayload)get_team_config_data)ChatService)S3BucketStorageget_default_bucket_namez/docchatdocchati  descriptionz	Not found)prefixtags	responsesdependenciesz/upload_and_process_files.files
project_idteam_idc           
   
      s  zp| st tjddt }||}|st tjddtj|d}|s+t tjddz*t||| d}|j	| ddI d	H  t
|}t||}|jd|d
 d| dW W S  tyq }	 zt|	 t ddt|	id|	d	}	~	ww  ty }	 zt|	 t ddt|	idd	}	~	ww )z%Upload provided files to the project.zNo files provided for uploadstatus_codedetailzTeam not found)r"   zProject not found)projectteamr!   chat)nested_pathN)r*   r#   zFiles uploaded successfully)messageresults  r+   )r   r   HTTP_400_BAD_REQUESTr   get_team_by_idHTTP_404_NOT_FOUNDr   check_project_in_dbr   store_on_s3r   r   doc_upload_call_to_chromadbget_uploaded_files	Exception
XCM_loggererrorstr)
r!   r"   r#   team_servicer(   r'   uploadedFilesclient_configchat_document_uploadere r>   //var/www/html/XCapMarket/controllers/docchat.pyupload_and_process_files2   sP   




r@   z/project/{project_id}/get_filesc                    s    t  }t|d}|| |dS )zGet the files in a project)bucket_namer)   )r   r   get_files_in_folder)r"   r#   xcap_s3_storage
s3_storager>   r>   r?   get_project_filesh   s   
rE   z/chat/session/newrequestselected_filesc              
      sf   z| j j}tt||||I dH W S  ty2 } zt| t| t	ddt
|id|d}~ww )zCreate a new chat sessionNr-   r+   r$   )statecurrent_userr   create_chat_sessionr   r5   printr6   r7   r   r8   )rF   r"   r#   rG   rI   r=   r>   r>   r?   rJ   p   s   

rJ   z/chat/session/allc                    s(   | j j}tt|||I dH }d|iS )Get all sessions for a userNsessions)rH   rI   r   get_all_sessions_for_userr   )rF   r"   r#   rI   rM   r>   r>   r?   get_all_sessions   s   
rO   z/chat/session/latestc              
      sf   z| j j}tt|||I dH W S  ty2 } zt| t| t	t
jdt|id|d}~ww )z!Get the latest session for a userNr+   r$   )rH   rI   r   get_latest_session_for_userr   r5   rK   r6   r7   r   r   r.   r8   )rF   r"   r#   rI   r=   r>   r>   r?   get_latest_session   s    
rQ   z#/chat/session/{session_id}/messages
   
session_idoffsetlimitc              
      sz   zt t| ||I dH }t||k}||| ||dW S  ty< } zt| t| tddt	|id|d}~ww )rL   N)messagesrT   rU   has_morer-   r+   r$   )
r   get_messages_for_sessionr   lenr5   rK   r6   r7   r   r8   )rS   rT   rU   rV   rW   r=   r>   r>   r?   rX      s"   

rX   z/chat/session/{session_id}/endc              
      sl   z| j j}tt||I dH }d|dW S  ty5 } zt| t| t	ddt
|id|d}~ww )zEnd a chat sessionNzChat session endedr+   sessionr-   r+   r$   )rH   rI   r   end_chat_sessionr   r5   rK   r6   r7   r   r8   )rF   rS   rI   r[   r=   r>   r>   r?   r\      s   
r\   z!/chat/session/{session_id}/updatepayloadc              
      sn   z| j j}tt|||I dH }d|dW S  ty6 } zt| t| t	ddt
|id|d}~ww )zUpdate a chat sessionNzChat session updatedrZ   r-   r+   r$   )rH   rI   r   update_chat_sessionr   r5   rK   r6   r7   r   r8   )rF   rS   r]   rI   r[   r=   r>   r>   r?   r^      s   

r^   )r   rR   )6__doc__osloggingtypingr   r   fastapir   r   r   r   r   r	   r
   r   r   +services.ppt_generator.data_classes.projectr   services.team_servicesr   utils.chat.indexr   utils.mysql_dbr   #utils.document_loader.DocUploaderV2r   schemas.chatr   r   r   r   r   controllers.presentationr   services.docchat.chatServicer   utils.s3_storager   r   	getLoggerr6   r)   postr8   r@   getrE   rJ   rO   rQ   intrX   r\   r^   r>   r>   r>   r?   <module>   s~    0
5