📄 api.cpython-312.pyc
/home/palash/git/local-ai/server/__pycache__/api.cpython-312.pyc
Language: pyc • Lines: 1110
�

���j������dZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddlm
Z
mZddlZddlmZmZmZddlmZmZmZmZmZdddd	d
dd�Zd
�ZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAdZBdZCdZDdZEdZFgd�ZGd�ZHd�ZIGd�dej�j��ZLd�ZMy)a�HTTP API endpoints for the chat web UI.

The request handlers here are the thin web layer over the chat engine in
``chat-webui.py``. All shared application state and helper functions live in the
entrypoint module and are injected here at startup via :func:`set_app_state`,
so nothing has to be duplicated.

The names in ``APP_STATE_NAMES`` are declared as module globals below and
replaced by the real objects when the entrypoint calls ``set_app_state``.
�N)�datetime)�parse_qs�urlparse)�get_current_user�get_identity�identity_from_headers)�COMFYUI_OUTPUT�FORCE_GPU_LANE�IMG_PATH�SELF_CHAT_MODE�UPLOADS_DIR�	image/png�
image/jpegz
image/webpz	image/gifz	image/bmp)z.pngz.jpgz.jpegz.webpz.gifz.bmpc��|syt|�j}|jd�}d}|jd�rt|td�d}}nK|jd�rt|td�d}}n%ttjj|�}}tjj|�}tjjtjj||��}||k7r#|j|tjz�sytjj|�sy|S)u!Resolve an ``/api/image/<id>`` identifier to a local image file path.

    Accepts ids shaped like the stored image URLs — ``uploads/<name>`` (user
    uploads) or ``output/<rel>`` (ComfyUI generated images) — plus bare
    filenames, which are looked up in the uploads dir first.
    N�/zuploads/zoutput/)
r�path�lstrip�
startswithr
�lenr	�os�basename�realpath�join�sep�isfile)�image_id�raw�base�rel�root�fpaths      �'/home/palash/git/local-ai/server/api.py�resolve_image_filer#0s�����
�8�
�
!�
!�C�

�*�*�S�/�C��D�
�~�~�j�!���S��_�%5�!6�c��	���	�	"�"�C��I���$8�c������!1�!1�#�!6�c��
�7�7���D�!�D��G�G���R�W�W�\�\�$��4�5�E���}�U�-�-�d�R�V�V�m�<��
�7�7�>�>�%� ���L�)+�ACTIVE_WINDOW_SECONDS�MAX_INPUT_TOKENS�MAX_QUEUE_SIZE�SHARES_FILE�_active_tokens�
_agent_tokens�_agent_users�_user_last_seen�_user_last_seen_lock�
_data_lock�	_db_fetch�_effective_contexts�_effective_contexts_lock�_image_url_rel�_load_extra_prompts�_location_events�_queue_conds�_queue_locks�_task_queues�_tokens_lock�active_users�context_token_report�create_share�	get_share�get_user_context_path�handle_theme_tool�list_shares�load_shares�model_status_snapshot�read_user_context�revoke_share�
save_sessions�save_shares�sessions�
sessions_meta�set_client_location�shares�task_create�task_delete�	task_list�task_update�tasks�write_user_contextc�6�t�j|�y)z?Inject the application state shared with the entrypoint module.N)�globals�update)�states r"�
set_app_staterT�s���I���U�r$c	�l�tjjtjjtjjtjj	t
���dd�}	t
|�5}|j�cddd�S#1swYyxYw#YyxYw)N�distz
index.htmlz5<html><body><h1>index.html missing</h1></body></html>)rrr�dirname�abspath�__file__�open�read)�p�fs  r"�read_index_htmlr^�s{��
�����
����������������(A�B�C���	�A�
G�
�!�W�	���6�6�8�	�	�	��G�F�s*�>B/�	B#�	B/�#B,�(B/�,B/�/B3c�>�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd
d�Z	d�Z
y	)�Handlerc��|jd�|jdd�|jdd�|jdd�|j�y)N���Access-Control-Allow-Origin�*zAccess-Control-Allow-MethodszGET, POST, PUT, DELETE, OPTIONSzAccess-Control-Allow-Headersz)Content-Type, Authorization, X-Auth-Token)�
send_response�send_header�end_headers)�selfs r"�
do_OPTIONSzHandler.do_OPTIONS�sU�����3�����6��<����*�,M�	
�	
���7�9d�e����r$c
�l�#�$�|jdk(rWt|j�}|s|jddid��yt	|�}|j||t|�d��y|jdk(r\t
|j�}|r1|jd|d	|d
xsd|jdd
�d��y|jddi�y|jdk(r�tj��$t5ttxsi�}ddd�t5tt��#ddd�t�#�$fd�j!�D��}|jd|i�y|jdk(r�t#�}|d|d|d|d|df\}}}	}
}	t|j�}|r7t%t'd|t)j*�j-�f��nd}|j|||	|
|t0|d��y|jdk(rJt|j�}|s|jddid��y|jdt3|�i�y|jj5d�r�t6jj9|j�}
t;|
�}|s|j=d �y|j|jd!i�|jd"�|jd#d
�d$��y|jj5d%��rLt?|j�j}|j5d%�r|t%d%�dn|}t6jjAt6jjCtD|��}|j5t6jjAtD��r�t6jjG|�rh|jId&�|jKd'd(�|jM�tO|d)�5}|jQ|jS��ddd�y|j=d �y|jj5d*��rZt6jj9t?|j�j�}t6jjAt6jjCtT|��}|j5t6jjAtT��r�t6jjG|�rz|jId&�|jKd'd+�|jKd,d-�|jM�tO|d)�5}|jQ|jS��ddd�y|j=d �y|jj5d.��r	|jt%d.�d}tW|�}|r�t6jjY|�d/j[�}t\j|d0�}|jId&�|jKd'|�|jKd,d-�|jKd1d2�|jM�tO|d)�5}|jQ|jS��ddd�y|j=d �y|jj5d3�rct6jj9|j�}t^5t`j|d4d5d6��}ddd�|j�y|jd7k(r�t|j�}|s|jgd��yt^5ttbj!�d8�d�9�}|D��cgc]q\}}|jd:d
�|k(rW||jd;d<�|jd"d�|jd=d�d>�te|tfj|g�����s}}}ddd�|j�y|jj5d?��r|jjid@�r�t|j�}|s|jddid��y|jjkdA�dB}t^5tbj|�}|r|jd:d
�|k7r|j=d �	ddd�ytfj|�}ddd�� |jdC|ite||���y|j=d �y|jdAk(rm|jId&�|jKd'dD�|jKd1dE�|jM�|jQtm�jo��yt6jjCt6jjqt6jjqt6jjAtr���dF�}t6jjAt6jjC||jjudA���}|j5t6jjA|��r�t6jjw|�r�tyjz|�\}}|jId&�|jKd'|xsd+�|jKd1d2�|jM�tO|d)�5}|jQ|jS��ddd�y|jj5dG�s,dHt6jj9|j�v�r�|jdIk(rLt|j�}|s|jddid��yt}|�}|jdJ|i�y|jj5dK��rt|j�}|s|jddid��yt�t?|j�j��} | jdLd
g�dxsd}!| jdMdNg�ddOv}"|"r|d
dPk7r|jddQidR��yt�|d	dS|!|"| jdTd
g�dxsd| jdUdVg�dxsdWdX��}|jt�j�|��y|j=d �y|jId&�|jKd'dD�|jKd1dE�|jM�|jQtm�jo��y#1swY�
�xYw#1swY�
�
xYw#t.$rd}Y��awxYw#1swYyxYw#1swYyxYw#1swYyxYw#1swY��xYwcc}}w#1swY��xYw#1swY��,xYw#1swYyxYw)YN�/api/user-context�error�Unauthorized���status��context�username�context_filez/api/check-authTrs�role�free�email�)�
authenticatedrsrurwryFz/api/active-usersc3�H�K�|]\}}|�vr�|z
tkr|���y�w�N)r%)�.0�u�last�agent_users�nows   ��r"�	<genexpr>z!Handler.do_GET.<locals>.<genexpr>�s1�������a���K�'�C�$�J�:O�,O���s�"�usersz/api/model-status�model�predicted_per_second�
overheated�gpu_temp�ram_evacuatingz�SELECT id FROM tasks WHERE user_id=? AND reminder_at IS NOT NULL AND reminder_at <= ? AND reminded=0 AND status NOT IN ('completed','cancelled')r)r�r�r�r�r��max_context�reminder_count�/api/sharesrIz/api/public/share/��message�created�owner)r�r��	shared_byz/output/rb�Content-Typer�rb�	/uploads/zapplication/octet-streamzContent-Disposition�inlinez/api/image/�rz
Cache-Controlz#public, max-age=31536000, immutablez/api/status/�unknownz	Not found)rpr��
/api/sessionsc�,�|djdd�S)Nr��updatedr)�get)�xs r"�<lambda>z Handler.do_GET.<locals>.<lambda>Os��!�A�$�(�(�9�a�"8�r$)�key�reverse�user_id�name�Chatr�)�
session_idr�r�r��/api/sessions/z	/messagesr��messagesztext/html; charset=utf-8zno-cacherVz/api/�.�
/api/tasksrN�/api/themes�scope�global�0)�1�true�True�yes�admin�Admin role required��listrp�limit�50�2)�	operationr�r�rpr�)Err�headers�	send_jsonrBr=rr��timer-�dictr,r8�setr+�sorted�itemsrArr/rr��	isoformat�	Exceptionr&r?rrrr<�
send_errorrrXrr	�existsrerfrgrZ�_safe_writer[r
r#�splitext�lower�
IMAGE_MIMEr.rNrGr:rF�endswith�splitr^�encoderWrYrr�	mimetypes�
guess_typerLrr�queryr>�json�loads)%rh�userrr�identityr�active�snap�ms�tps�oh�gtemp�ram_evacr��token�recrr!r]�filenamer�ext�ctype�task_idrp�sorted_items�sid�meta�result�msgs�DIST_DIR�_�
user_tasks�qsr��	is_globalrr�s%                                   @@r"�do_GETzHandler.do_GET�s����9�9�+�+�#�D�L�L�1�D�������8���E��'��-�G��N�N�&� $�$9�$�$?��
��Y�Y�+�
+�,�T�\�\�:�H�����)-�$,�Z�$8� (�� 0� :�F�!)���g�r�!:�	�������7�8�
�Y�Y�-�
-��)�)�+�C�%�
2��?�0�b�1��
2��
0�!�,�/��
0���!$������F�
�N�N�G�V�,�-�
�Y�Y�-�
-�(�*�D��W�
��+�,��\�"��Z� ��%�&�,�(�B��R���
#�'����5��lp��Y�0B�EI�KS�KW�KW�KY�Kc�Kc�Ke�Df�&g�"h�vw��
�N�N��,/�"$� %�&.�#3�&4��

��Y�Y�-�
'�#�D�L�L�1�D�������8���E���N�N�H�k�$�&7�8�9�
�Y�Y�
!�
!�"6�
7��G�G�$�$�T�Y�Y�/�E��E�"�C������$���N�N�"�w�w�y�"�5�"�w�w�y�1�!$����"�!5��
��Y�Y�
!�
!�*�
-��4�9�9�%�*�*�C�+.�>�>�*�+E�#�c�*�o�&�'�3�C��G�G�O�O�B�G�G�L�L���$E�F�E���������� ?�@�R�W�W�^�^��F��"�"�3�'�� � ���=�� � �"��%��&�/�!��$�$�Q�V�V�X�.�/���O�O�C� �
�Y�Y�
!�
!�+�
.��w�w�'�'�����(;�(@�(@�A�H��G�G�O�O�B�G�G�L�L��h�$G�H�E���������� <�=�"�'�'�.�.�QV�BW��"�"�3�'�� � ��1K�L�� � �!6��A�� � �"��%��&�/�!��$�$�Q�V�V�X�.�/���O�O�C� �
�Y�Y�
!�
!�-�
0��y�y��]�!3�!4�5�H�&�x�0�E���g�g�&�&�u�-�a�0�6�6�8��"���s�L�9���"�"�3�'�� � ���7�� � �!6��A�� � ��2W�X�� � �"��%��&�/�!��$�$�Q�V�V�X�.�/���O�O�C� �
�Y�Y�
!�
!�.�
1��g�g�&�&�t�y�y�1�G��
�����	�k�J���
�
�N�N�6�"�
�Y�Y�/�
)�#�D�L�L�1�D�����r�#��.���
�%�!�'�'�)�8� � ��&2�
�"��T��x�x�	�2�.�$�6�'*� $����� 8�#'�8�8�I�q�#9�#'�8�8�I�q�#9�	�
/�s�H�L�L��b�4I�J��
��
�

�"
�N�N�6�"�
�Y�Y�
!�
!�"2�
3��	�	�8J�8J�;�8W�#�D�L�L�1�D�������8���E���)�)�/�/�#�&�q�)�C��
)�$�(�(��-���t�x�x�	�2�6�$�>��O�O�C�(��	
)�
)�
 �|�|�C�(��
)������"�D��.�s�D�9�������$�
�Y�Y�#�
����s�#����^�-G�H����_�j�9��������_�.�5�5�7�8��w�w�|�|�����������������0I� J�K�V��H��G�G�O�O�B�G�G�L�L��4�9�9�;K�;K�C�;P�$Q�R�E���������� 9�:�r�w�w�~�~�e�?T�$�/�/��6���q��"�"�3�'�� � ���1T�:T�U�� � ��2W�X�� � �"��%��&�/�!��$�$�Q�V�V�X�.�/�/����%�%�g�.�#����9I�9I�$�)�)�9T�2T��9�9��,�+�D�L�L�9�D�������'@���M��!*�4��J��N�N�G�Z�#8�9��Y�Y�)�)�-�8�+�D�L�L�9�H�#������'@���M��!�(�4�9�9�"5�";�";�<�B��F�F�7�R�D�1�!�4�<��E� "���x�#�� 7�� :�>Z� Z�I� �X�f�%5��%@�����1F�'G�PS��T��.� ��,�)/�%*�&/�&(�f�f�X��t�&<�Q�&?�&G�4�%'�V�V�G�d�V�%<�Q�%?�%E�2��	�F��N�N�4�:�:�f�#5�6��O�O�C�(��"�"�3�'�� � ��1K�L�� � ��*�=�� � �"�� � ��!2�!9�!9�!;�<�S
2�
2��
0�
0��&�
#�!"��
#��T/���/���/���
�
�� 
�

�
��0
)�
)��@/�/�s��=x-�x:�$Ay� y�6 y%� y1� y=�'z�;A6z
�1z�?z�z�6 z*�-x7�:y�y�y�y"�%y.�1y:�=z�
z�z�z'�*z3c��
�|jjd�r�t|j�}|s|j	ddid��y|jjd�d}t
||�r|j	dd	i�y|j	dd
id��y|jjd��r:t|j�}|s|j	ddid��y|jjd�d}t5tj|�}|r|jd
d�|k7r|jd�	ddd�yttj|g��}ddd�dD]E}t|5t|}|D�cgc]}|jd�|k7s�|��c}|ddddd��Gt5tj!�D];\}	}
|
jd�|k(s�|
jd�dvs�/dd|d�t|	<�=	ddd�D�]}|jd�dk(r�|jdd�xsd}|rqt"jj%t&t)|��}
|
}t"jj+|�r#t-d|���t#j.|�|jdd�}g}t1|t2�r|j5|�n^t1|t�rN|D]I}t1|t6�s�|jd�dk(s�)|j5|jdd���K|D]�}|jd�D]�}|j9d�}|dk7s�||djd�d }t"jj;|�}
t"jj%t<|
�}t"jj+|�s��t-d!|���t#j.|�������|D�]}|jdd�}t1|t�s�'|D]�}t1|t6�r|jd�d"k7r�(|jd"i�jd#d�}|jd�s�\t"jj;|jd$d%�d �}
t"jj%t<|
�}t"jj+|�s��t-d&|���t#j.|�����"t5|tv}|r,tj?|d�tj?|d�ddd�r%t@5tBj?|d�ddd�|rtE�|j	dd'i�y|jd�y|jjd(�r}t|j�}|s|j	ddid��y|jjd�d}	tG|	|�r|j	dd'i�y|jd�y|jd�y#1swY��.xYwcc}w#1swY��>xYw#1swY���xYw#1swY��9xYw#1swY��xYw))Nz/api/shares/rlrmrnrorr�rp�revokedzShare not found or not yoursr�r�r�rx��gpu�cpur�)�donerl�	cancelledzSession was deleted)rprlr�ru�	assistant�
_image_urlz[delete] Removed output image: �content�type�textz[FILE:r�������]rz [delete] Removed uploaded file: �	image_url�url�?r�z![delete] Removed uploaded image: �deleted�/api/tasks/)$rrrr�r�r�rCr.rGr�r�r�rFr6r7rNr�rrrr2r��print�remove�
isinstance�str�appendr��findrr
�popr1r0rDrK)rhr�r�r�r�r��mode�q�item�tid�t�msgr��fnamer!r�texts�partr��idx�url_partr�s                      r"�	do_DELETEzHandler.do_DELETE�s����9�9����/�#�D�L�L�1�D�������8���E���I�I�O�O�C�(��+�E��E�4�(�����)�4�5�����)G�H�QT��U�
�Y�Y�
!�
!�"2�
3�#�D�L�L�1�D�������8���E���)�)�/�/�#�&�q�)�C��
3�$�(�(��-���t�x�x�	�2�6�$�>��O�O�C�(��	
3�
3�
�H�L�L��b�1�2��
3�'�
Q��!�$�'�Q�$�T�*�A�-.�P�T�$�(�(�<�2H�C�2O�D�P�A�a�D�Q�Q�
Q��
�#�k�k�m��F�C���u�u�\�*�c�1�a�e�e�H�o�M^�6^�&1�%:�*-�&��c�
��
��
1���7�7�6�?�k�1��'�'�,��3�9�r�C�� "�����X�~�c�7J� K�� %���7�7�>�>�%�0�!�$C�E�7�"K�L��I�I�e�,��g�g�i��,�����c�3�'��L�L��%���T�*� #�?��%�d�D�1�d�h�h�v�6F�&�6P�!�L�L����&�"�)=�>�?�"�	1�D� $�
�
�8� 4�1��"�i�i��4���"�9�'+�C�D�z�'7�'7��'<�Q�'?�H�$&�G�G�$4�$4�X�$>�E�$&�G�G�L�L��e�$D�E�!�w�w�~�~�e�4� %�(H���&P� Q� "�	�	�%� 0�1�	1�#
1�:�
)���g�g�i��,��!�#�t�,���
)�D�%�d�D�1�T�X�X�f�5E��5T� ��(�(�;��3�7�7��r�B�C��>�>�+�6� ��G�G�,�,�S�Y�Y�s�A�->�q�-A�B�E��G�G�L�L��e�<�E��w�w�~�~�e�,�� A�%��I�J��	�	�%�(�
)�	
)� �
1�������L�L��d�+�!�%�%�c�4�0�	
1�
�-�7�'�+�+�C��6�7��������)�4�5�����$�
�Y�Y�
!�
!�-�
0�#�D�L�L�1�D�������8���E���)�)�/�/�#�&�q�)�C��3��%�����)�4�5�����$��O�O�C� �q
3�
3��Q�Q�Q��
�
��j
1�
1��7�7�sf�
?Z�Z�Z/�Z*�/Z*�3Z/�	/Z<�9Z<�
Z<�7[	�"[�Z'�*Z/�/Z9	�<[�	[�[ c
�"�|jjd��r:t|j�}|s|j	ddid��y|jjd�d}t
|jjdd	��}tj|jj|��}t5tj|�}|rD|jd
d�|k(r/|jd|d�|d<tj�|d
<ddd�rt�|j	dd
i�y|j!d�y|jjd�r�t|j�}|s|j	ddid��y|jjd�d}t
|jjdd	��}tj|jj|��}t#||fi|j%�D��cic]
\}}|dvs�||��c}}��}	|	r|j	d|	i�y|j!d�y|j!d�y#1swY��cxYwcc}}w)Nr�rlrmrnrorr��Content-Lengthrr�rxr�r�rpr�r�)�title�descriptionrp�priority�due_date�reminder_at�task)rrrr�r�r��intr�r�r��rfiler[r.rGr�rDr�rMr�)
rhr�r��length�bodyr�r�k�vrs
          r"�do_PUTzHandler.do_PUTs���9�9��� 0�1�#�D�L�L�1�D�������8���E���)�)�/�/�#�&�q�)�C�����)�)�*:�A�>�?�F��:�:�d�j�j�o�o�f�5�6�D��
2�$�(�(��-���D�H�H�Y��3�t�;�#'�8�8�F�D��L�#A�D��L�&*�i�i�k�D��O�	
2�
�������)�4�5�����$�
�Y�Y�
!�
!�-�
0�#�D�L�L�1�D�������8���E���)�)�/�/�#�&�q�)�C�����)�)�*:�A�>�?�F��:�:�d�j�j�o�o�f�5�6�D��C��W�4�:�:�<�*V�4�1�a�1�QU�LU�!�Q�$�*V�W�A�������{�+�����$��O�O�C� �1
2�
2��$*Vs�AI>�,J�9J�>Jc��)�G�H�|jdk(r�t|j�}|s|jddid��yt	|jjdd��}|r.t
j|jj|��ni}	t||jdd	�|jd
��\}}|j||d��y|jd
k(r�t	|jjdd��}|r.t
j|jj|��ni}|jdg�xsg}|jdg�xsg}td�t5|D]}	tj!|	��|D]}
t"j!|
��	ddd�|jddi�y|jdk(r�d	}t	|jjdd��}|rA	t
j|jj|��}|jdd	�}|s+t'|j�}|xsijdd	�}t5|rt(rt(j+|d�ddd�|jddi�y|jdk(r|jddi�y|jdk(�r�t|j�}|s|jddid��yt	|jjdd��}t
j|jj|��}|jdd�}
|
dk(r3|jdd	�}t-||�|jd|d��y|
dk(r�t'|j�}|r|ddk7r|jddid ��y|jdd	�}t/|�}|rZt1j2t0jj5|�d�!�t7|d"�5}|j9|�ddd�|jd|d��yt;|�}|j||t/|�d#��y|jd$k(�r�t|j�}|s|jddid��yt	|jjdd��}t
j|jj|��}tt=j>��}|jdd%�}t@5tBj|�}|r|jd&d	�|k7r|jdd'id(��	ddd�y	ddd�|||jd)d	�|jd*�|jd+�||jd,�tE|jd-��tE|jd.��xrtE|jd-��tE|jd/��d0�
}|d.}|jd1�}|d2vs|t"vr|t"vrtFnd3}|rd.}tHr|sd3}||d1<tJ|5tMtN|�tPk\r|jdd4id5��	ddd�ytN|jS|�tT|jW�ddd�t@5d6d7||tE|jd-��|tE|jd/��d8�tX|<ddd�|jd9|i�y|jd:k(�r@t	|jjdd��}t
j|jj|��}|jd;d	�}|jd<d	�}t0jj[|�d=j]�}tt=j>��|z}t0jj_t`|�}tcjd|�}t7|d>�5}|j9|�ddd�d?|��}|j||d@��y|jdAk(�r�t|j�}|s|jddid��yt	|jjdd��}t
j|jj|��}|jd<d	�}|jdB�xsdCjgdD�j]�}|dEvrdC}	tcjd|dF�G�}tt=j>��dDz|z}t1j2t`d�!�t0jj_t`|�}t7|d>�5}|j9|�ddd�|jdId?|��i�y|jdJk(�r
t|j�}|s|jddid��yt	|jjdd��}t
j|jj|��}|jdKd	�}|s|jddLid��y	ddl4} |}!|jdMd	�}"| jjdN|!�}#|#r%|#jmd=�}$|!|#jo�d}!n�|"s�tM| jpdO|!��}%tM| jpdP|!��}&tM| jpdQ|!��}'tM| jpdR|!��}(|%|&|'|(dS�})ts|)|)j
�T�}$|)|$dk(rdU}$ndU}$dVdWdXdYdZ�}*d[d\d]d^d_d`�}+|$|*v�r�ddl:},ddl;}-ddl<}.ddl=}/|*|$}0|0daz}1t}|db�si|_?|$|j~vr9tdc|$�dd��|,j�j�|0|1�e�|j~|$<|j~|$}2tdf|$�dgtM|!��dh��|-j��}3|/j7|3d>�5}4|4j�d=�|4j�di�|4j�dj�|2j�|!�D]O}5|5j�dkzj�dldk�j�dm�}6|4j�|6j����Q	ddd�tcj�|3j���j��}7|j|7dndo��n�ddlO}8ddlP}9|"xs|+j|$d_�}:tdp|$�dq|:�drtM|!��dh��|9j�|!|:��Gt���H�G�Hfds�};|8j�|;��tcj�t��H��j��}7|j|7dtdo��yy|jdwk(�rIt|j�}|s|jddid��yt	|jjdd��}i}<i}=d	}>|rw	t
j|jj|��}?t�|?jdx�xsg�}<|?jdy�xsi}=|?jdz�xsd	}>tt=j>��}t�j��}@t@5gt�|<d{@|@||<|=|>d|�tB|<ddd�t��|jd|i�y|jd}k(�rot	|jjdd��}t
j|jj|��}|jd9�}|jd~�rJt�d	�|rt�j|�nd}A|ArAj��|jddi�y|jd�}B|jd��}C|B�MC�K	t�j
d�d�BCd��d�d�id����j
�}D|Djd�d	�}Et�|E�|rt�j|�nd}A|ArAj��|jddi�y|jd�k(�rt|j�}|s|jddid��yt	|jjdd��}t
j|jj|��}t�||jd�d��|jd�d	�|jd�d��|jd��|jd�|jd���}	|jd�|	i�y|jd�k(r�t�|j�}|s|jddid��yt	|jjdd��}t
j|jj|��}|jd��r|ddk7r|jdd�id ��yt�|d|�}F|jt
j|F��y|j�d(�y#t$r(}|jdt|�id��Yd}~yd}~wwxYw#1swY���xYw#t$$rd	}Y��wxYw#1swY��3xYw#1swY��|xYw#1swY��0xYw#1swY���xYw#1swY���xYw#1swY��QxYw#t$$r|jddHid��YywxYw#1swY�	��xYw#1swY���xYw#t$$rJ}tdu|���t�j��|jdt|�idv��Yd}~yd}~wwxYw#t$$rg}<Y��PwxYw#1swY��xYw#t$$rt�Bd��d�Cd����Y���wxYw)�Nr�rlrmrnrorrr�rx�	msg_indexi�)r�r�z/api/register-agent�tokens�	usernameszAgent registered�okTz/api/leavingrsz/api/logoutrk�actionr[�writerr)rprs�	overwriterur�z(Admin role required to overwrite contextr�)�exist_ok�wrqz	/api/chat�defaultr�zSession not foundr�r��image�audio�client_timestamp�researchr��no_tools)
r�r�r�r(r)r�r*r+r�r,rr�r�zServer busyi��queuedzWaiting in line...)rpr�r�rr+r�r,r�z/api/extract-filer��datar��wbr�)r�r�z/api/upload-imager��jpgr�)�pngr0�jpeg�webp�gif�bmpF)�validatezInvalid image datar�z/api/ttsr�zNo text provided�voicez^\s*\[(bn|hi|te|kn|en)\]\s*z[\u0980-\u09FF]z[\u0900-\u097F]z[\u0C00-\u0C7F]z[\u0C80-\u0CFF])�bn�hi�te�kn)r��enz3/home/palash/.piper_voices/bn_BD-google-medium.onnxz7/home/palash/.piper_voices/hi_IN-priyamvada-medium.onnxz7/home/palash/.piper_voices/te_IN-padmavathi-medium.onnxz0/home/palash/.piper_voices/en_US-amy-medium.onnx)r8r9r:r<zbn-IN-TanishaaNeuralzhi-IN-SwaraNeuralzte-IN-ShrutiNeuralzkn-IN-GaganNeuralzen-US-AriaNeural)r8r9r:r;r<z.json�
_piper_voiceszts] Loading Piper voice 'z' ...)�config_pathz[tts] Piper z: synthesizing z chars�i"Vi�i���z<i2z	audio/wav)r)r�z[tts] edge-tts z (z): c���K��j�23d{���}|ddk(s��j|d��'7�"6y�w)Nr�r)r.)�stream�extend)�chunk�communicate�mp3_datas ��r"�_genzHandler.do_POST.<locals>._gen?sD�����+6�+=�+=�+?�?�?�%�$�V�}��7� (����f�
� >�?��+?�s �?�=�;�=�	?�?�=�?z
audio/mpegz
[tts] Error: i�r��system_prompts�context_tokens�
system_promptzNew Chat)r�r�r�r�rGrHrIz
/api/location�denied�latitude�	longitudez+https://nominatim.openstreetmap.org/reverser�)�format�lat�lonz
User-AgentzLocalAI/1.0�)�paramsr��timeout�display_namez.4fz, r�r�Untitledrr�mediumrrrr�r�r�)crrr�r�rr�r�r�rr[r;�
ValueErrorr�r�r8r*�addr+r�rr,rrOr=r�makedirsrWrZr#rB�uuid�uuid4r.rG�boolrr
r6rr7r'r�r5�notifyrNr�r�rr
�base64�	b64decoder�re�match�group�end�findall�max�piper�io�struct�wave�hasattrr=�
PiperVoice�load�BytesIO�setnchannels�setsampwidth�setframerate�
synthesize�audio_float_array�clip�astype�writeframes�tobytes�	b64encode�getvalue�decode�asyncio�edge_tts�Communicate�	bytearray�run�bytes�	traceback�	print_excr3r�rFrDrHr4r��requestsrJrr>r�)Irhr�rrr�r��err rr}rsr�r"r�rr]rrr�r�r��entry�cpu_flaggedrr��data_b64r��	safe_name�filepathr�file_url�raw_textr_r�r7�m�tagr8r9r:r;�scores�PIPER_VOICES�EDGE_VOICESrerfrgrh�	onnx_path�cfg_path�pv�wav_io�wfrC�int16�	audio_b64ryrz�
edge_voicerF�extrarHrI�ext_bodyr��evrN�lng�geo�displayr�rDrEsI                                                                       @@r"�do_POSTzHandler.do_POST;sA����9�9�
�%�#�D�L�L�1�D�������8���E������)�)�*:�A�>�?�F�:@�4�:�:�d�j�j�o�o�f�5�6�b�D�
�)��$�(�(�<��4�d�h�h�{�6K��
��s�
�N�N�U�3�7�8�
�Y�Y�/�
/�����)�)�*:�A�>�?�F�:@�4�:�:�d�j�j�o�o�f�5�6�b�D��X�X�h��+�1�r�F�����b�1�7�R�I��$�%��
(��)�A�!�%�%�a�(�)�"�(�A� �$�$�Q�'�(�
(�

�N�N�D�$�<�(�
�Y�Y�.�
(�
�H�����)�)�*:�A�>�?�F��"��:�:�d�j�j�o�o�f�&=�>�D�#�x�x�
�B�7�H��0����>��$�N��/�/�
�B�?���
8���#�'�'��$�7�
8�
�N�N�D�$�<�(�
�Y�Y�-�
'�
�N�N�D�$�<�(�
�Y�Y�-�
-�#�D�L�L�1�D�������8���E������)�)�*:�A�>�?�F��:�:�d�j�j�o�o�f�5�6�D��X�X�h��/�F��� ��(�(�9�b�1��"�4��1����$�D�A�B��;�&�0����>���8�F�#3�w�#>��N�N�G�-W�#X�ad�N�e���(�(�9�b�1��,�T�2����K�K������� 5��E��d�C��)�A�����(�)����$�D�A�B�+�D�1�����#*�$(�(=�d�(C����Y�Y�+�
%�#�D�L�L�1�D�������8���E������)�)�*:�A�>�?�F��:�:�d�j�j�o�o�f�5�6�D��$�*�*�,�'�G��(�(�<��3�C��
�$�(�(��-���t�x�x�	�2�6�$�>��N�N�G�-@�#A�#�N�N��	
�
�>�
�#�!��8�8�I�r�2����'�*����'�*��$(�H�H�-?�$@� ����*�!5�6��D�H�H�U�O�,�K��d�h�h�z�6J�1K� ����*�!5�6��E�* ��,�K��8�8�F�#�D��>�)�T��-E�)-��)=�~�5������k��� �E�&�M��d�#�
,��|�D�)�*�n�<��N�N�G�]�#;�C�N�H��
,�
,��T�"�)�)�%�0��T�"�)�)�+�
,��	
�&�3�"%� � $�T�X�X�j�%9� :�&� $�T�X�X�j�%9� :�"��g��	
�
�N�N�I�w�/�0�
�Y�Y�-�
-�����)�)�*:�A�>�?�F��:�:�d�j�j�o�o�f�5�6�D��8�8�F�B�'�D��x�x���+�H��'�'�"�"�4�(��+�1�1�3�C��D�J�J�L�)�C�/�I��w�w�|�|�K��;�H��"�"�8�,�C��h��%�
�������
�"�9�+�.�H��N�N�8�T�:�;�
�Y�Y�-�
-�#�D�L�L�1�D�������8���E������)�)�*:�A�>�?�F��:�:�d�j�j�o�o�f�5�6�D��x�x���+�H��8�8�E�?�+�e�3�3�C�8�>�>�@�C��F�F���
��&�&�x�%�@���D�J�J�L�)�C�/�#�5�I��K�K��d�3��w�w�|�|�K��;�H��h��%�
�������
��N�N�E�Y�y�k�#:�;�<�
�Y�Y�*�
$�#�D�L�L�1�D�������8���E������)�)�*:�A�>�?�F��:�:�d�j�j�o�o�f�5�6�D��x�x���+�H������);�<�S��I��L
>��������"�-���B�H�H�;�T�B����'�'�!�*�C�������>�D���Z�R�Z�Z�(:�D�A�B�B��Z�R�Z�Z�(:�D�A�B�B��Z�R�Z�Z�(:�D�A�B�B��Z�R�Z�Z�(:�D�A�B�B�$&�b��"�E�F��f�&�*�*�5�C��c�{�a�'�"���C�P�S�S�L�	 ��1�-�.�-�,����,�&�2�2� ,�S� 1�I�(�7�2�H�"�4��9�-/��*��$�"4�"4�4�� ;�C�5��F�G�27�2B�2B�2G�2G�%�8�3H�3��*�*�3�/��+�+�C�0�B��L���_�S��Y�K�v�N�O��Z�Z�\�F����6�4�0�<�B�����*�����*�����.�%'�]�]�4�%8�<�E�%*�%<�%<�u�%D�$J�$J�6�SX�$Y�$`�$`�af�$g�E��N�N�5�=�=�?�;�<�	<�!'� 0� 0����1B� C� J� J� L�I��N�N�Y��#L�M�,�!&�!R�+�/�/�#�?Q�*R�J��O�C�5��:�,�c�#�d�)��F�S�T�"*�"6�"6�t�Z�"H�K�(�{�H�?��K�K���'� &� 0� 0��x�� A� H� H� J�I��N�N�Y��#M�N�N�$�Y�Y�/�
)�#�D�L�L�1�D�������8���E������)�)�*:�A�>�?�F��E��N��M���#�z�z�$�*�*�/�/�&�*A�B�H�/����=M�0N�0T�RT�U�E�%-�\�\�2B�%C�%I�r�N�$,�L�L��$A�$G�R�M��d�j�j�l�#�C��)�)�+�C��

� "���
�&�"�"�#�&+�&4�%2�&�
�c�"�

�
�O��N�N�L�#�.�/�
�Y�Y�/�
)�����)�)�*:�A�>�?�F��:�:�d�j�j�o�o�f�5�6�D��h�h�y�)�G��x�x��!�#�B�'�6=�%�)�)�'�2�4����F�F�H�����d�|�,���(�(�:�&�C��(�(�;�'�C���3�?�
A�"�,�,�E�*0��S�I�!-�}� =� !�	�
�d�f��"�g�g�n�b�9�G�'��0�3:�!�%�%�g�.�t�B�������N�N�D�$�<�(�
�Y�Y�,�
&�#�D�L�L�1�D�������8���E������)�)�*:�A�>�?�F��:�:�d�j�j�o�o�f�5�6�D��D�$�(�(�7�J�"?����-�Y[�A\�^b�^f�^f�gq�s{�^|�C�G�G�HR�S�UY�U]�U]�^j�Uk�mq�mu�mu�vC�mD�E�A��N�N�F�A�;�'�
�Y�Y�-�
'�#�D�L�L�1�H�������8���E������)�)�*:�A�>�?�F��:�:�d�j�j�o�o�f�5�6�D��x�x��!�h�v�&6�'�&A�����)>�?���L��&�x�
�';�T�B�F��N�N�4�:�:�f�-�.��O�O�C� ��m
�
������Q��0���=���
��
(�
(��"!�"�!�H�"��

8�
8��:)�)��*
�
��J
,�
,��	
�	
��(
�
��"�
�����)=�>�s��K��
��
�
��B<�<��,�
>��
�a�S�)�*��#�#�%������Q��0���=�=��
>��&!���E���

�

��H!�A�'�3�s�)�2�c�#�Y�(?�@�A�sP�/AM=�>9AN1�
AAN>�AO�AO�/AAO*�0AO7�9/AO7�6AAP�0AP�?AP�AQ�0GAQ�3BAQ�DAQ�:A6AR2�'AS�CA
AS�M=	AN.�NAN)�N)AN.�N1AN;�N>AO
�OAO
�OAO�OAO'�O*AO4�O7AP�PAP�PAP�PAP?�P>AP?�QAQ�QAQ�QAQ�Q	AR/�Q%AAR*�R*AR/�R2AS�SAS�SAS�SAS0�S/AS0c�f�	|jj|�y#ttf$rYywxYwr{)�wfiler#�BrokenPipeError�ConnectionResetError)rhr.s  r"r�zHandler._safe_write�s1��	��J�J���T�"���!5�6�	��	�s��0�0c���|j|�|jdd�|jdd�|j�|jt	j
|�j
��y)Nr�zapplication/jsonrcrd)rerfrgr�r��dumpsr�)rhr.rps   r"r�zHandler.send_json�s^�����6�"�����);�<����6��<�����������D�)�0�0�2�3r$c��yr{�)rhrM�argss   r"�log_messagezHandler.log_message�s��r$N)rb)�__name__�
__module__�__qualname__rir�r
rr�r�r�r�r�r$r"r`r`�s1���f=�Pi!�V!!�Fb!�H�4�
r$r`c��|K�tjt|�t|���d{���\}}||fS7��wr{)ry�gather�
llm_call_user�llm_call_bot)�user_message�
user_response�bot_responses   r"�handle_chatr��s@����(/����l�#��\�"�)�#��M�<��,�&�&�	#�s�,<�:�<)N�__doc__r]�http.server�httpr�r�rr_r�rrYr�urllib.parserrr��server.authrrr�
server.configr	r
rrr
r�r#r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rArBrCrDrErFrGrHrIrJrKrLrMrNrO�APP_STATE_NAMESrTr^�server�SimpleHTTPRequestHandlerr`r�r�r$r"�<module>r�s|��	�����	�	�����+����
��
��
�
���
�
��<�����������
�������
�
��	��������������������������	����������������
������
���	
�������	�������,��^�

G�r
�d�k�k�2�2�r
�h'r$