o
    h#                     @   sF  d dl mZmZmZ d dlmZ 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 d
dlmZmZmZ d
dlmZmZ d
dlmZ d dlm Z  d dl!Z!e!"e#Z$dd Z%edd Z&edd Z'edd Z(edd Z)edd Z*edd Z+edd Z,ed d! Z-eed"d# Z.dS )$    )renderget_object_or_404redirect)login_required)messages)JsonResponseStreamingHttpResponseHttpResponseRedirect)call_command)default_storage)reverse)settings)xframe_options_exempt   )ChatbotFileRAGMetadata)FileUploadFormChatbotForm)retrieve_ai_response)StringIONc                 C   s
   t | dS )Nz	home.html)r   )request r   0/var/www/ai-chatbot-integration/chatbot/views.pyhome   s   
r   c                 C   s    t jj| jd}t| dd|iS )N)userzdashboard.htmlchatbots)r   objectsfilterr   r   )r   r   r   r   r   	dashboard      r   c                 C   s~   t t|| jd}| jdkr3t| j| j}| r2|jdd}||_	|  t
| d td|jdS nt }t| d||d	S )
Nidr   POSTFcommitzFile uploaded successfully!chatbot_detail
chatbot_idzchatbot_detail.html)chatbotform)r   r   r   methodr   r#   FILESis_validsaver)   r   successr   r"   r   )r   r(   r)   r*   file_instancer   r   r   r&      s   
r&   c                 C   sj   | j dkr*t| j}| r)|jdd}| j|_|  t| d td|j	dS nt }t
| dd|iS )	Nr#   Fr$   zChatbot created successfully!r&   r'   zchatbot_create.htmlr*   )r+   r   r#   r-   r.   r   r   r/   r   r"   r   )r   r*   r)   r   r   r   chatbot_create*   s   

r1   c              
      sX  t d| j dt| j d   z
tt | jd}W n@ ty\ } z4t 	dt
|  | jdkrFtdt
| dd	d
dW  Y d }~S t| ddt
|id
dW  Y d }~S d }~ww | jdkr fdd}zt| d	d}d|d< d|d< |W S  ty } zt dt
|  tdt
| dd	ddW  Y d }~S d }~ww t| dd|iS )NReceived request: method=
, headers=, chatbot_id=r!   zChatbot access failed: r#   z/data: ERROR: Invalid chatbot or access denied: 

ztext/event-streami  )content_typestatuszprocess_rag_data.htmlerrorr7   c               
   3   s    t  } z]z)td | d | d | D ]}td|   d|  dV  qdV  W n% tyS } ztdt|  d	t| dV  W Y d }~nd }~ww W | 	  d S W | 	  d S | 	  w )
Nprocess_rag_data)stdoutr   zStreaming line: zdata: r5   zdata: [DONE]

zRAG data processing failed: z)data: ERROR: RAG data processing failed: )
r   r
   seekloggerdebugstrip	Exception	exceptionstrclose)outputlineer'   r   r   stream_command_outputJ   s$   

z/process_rag_data.<locals>.stream_command_output)r6   zno-cachezCache-ControlnozX-Accel-BufferingzSSE streaming failed: zdata: ERROR: Server error:   r)   )r=   r>   r+   dictheadersr   r   r   r@   r8   rB   r   r   rA   )r   r(   r)   rF   rG   responser   r'   r   r:   8   sD   $
$

r:   c                 C   s   | j dkrt| d ttd|gdS tt|| jd}z%tj	j
||d}t|jj}t|r6t| |  t| d W n tjyQ   t| d Y nw ttd|gdS )	Nr#   zInvalid request method.r&   )argsr!   )r"   r)   zFile deleted successfully!z:File not found or you do not have permission to delete it.)r+   r   r8   r	   r   r   r   r   r   r   getr   pathfilenameexistsdeleter/   DoesNotExist)r   r(   file_idr)   file_obj	file_pathr   r   r   delete_filek   s   


rX   c                 C   s  t d| j dt| j d|  | jdkr$t d tddidd	S | jd
dkr9t d tddidd	S | jdd	 }t d|  |sYt d tddidd	S t
|| j|ddd}d|v r{td|d id|d v rwdd	S dd	S t|d |d dS )Nr2   r3   r4   r#   zInvalid method: Expected POSTr8   zMethod must be POST  r9   X-Requested-WithXMLHttpRequest4Not an AJAX request: Missing X-Requested-With headerRequest must be AJAXquery zQuery received: zQuery is emptyzQuery cannot be empty   Fr(   r   message	n_results
include_aiNo RAG datarI   resultswarnings)rf   rg   )r=   r>   r+   rJ   rK   r8   r   rN   r#   r?   r   r   )r   r(   r^   resultr   r   r   
search_rag~   s2   $



(ri   c                 C      t t|| jd}| jdkrr| jddkr"td tddidd	S | j	d
d
 }td|  |sBtd tddidd	S t|| j|ddd}d|v rdtd|d id|d v r`dd	S dd	S t|d |d |d dS t| dd|iS )Nr!   r#   rZ   r[   r\   r8   r]   rY   r9   rb   r_   Received chat message: Message is emptyMessage cannot be emptyr`   Tra   re   rI   rL   rf   rg   rL   rag_contextrg   zchatbot_preview.htmlr)   r   r   r   r+   rK   rN   r=   r8   r   r#   r?   r>   r   r   r   r(   r)   rb   rh   r   r   r   chatbot_preview   s2   


(rr   c                 C   s    t t|| jd}t| dd|iS )Nr!   zchatbot_test.htmlr)   )r   r   r   r   )r   r(   r)   r   r   r   chatbot_test   r    rs   c                 C   rj   )Nr!   r#   rZ   r[   r\   r8   r]   rY   r9   rb   r_   rk   rl   rm   r`   Tra   re   rI   rL   rf   rg   rn   zchatbot_embed.htmlr)   rp   rq   r   r   r   chatbot_embed   s2   


(rt   )/django.shortcutsr   r   r   django.contrib.auth.decoratorsr   django.contribr   django.httpr   r   r	   django.core.managementr
   django.core.files.storager   django.urlsr   django.confr   $django.views.decorators.clickjackingr   modelsr   r   r   formsr   r   utilsr   ior   logging	getLogger__name__r=   r   r   r&   r1   r:   rX   ri   rr   rs   rt   r   r   r   r   <module>   sF    




2

#
#
