CoolFace
Modelpublic

aigenrec/luminabackend

sourceHugging Faceupdated 10mo agoView on Hugging Face
0likes
rag_service.cpython-312.pyc78 linesDownload Raw Back to __pycache__
1�

2�I3i�,����ddlmZmZmZmZddlmZddlmZddl	m3Z4ddlmZm
Z
ddlmZddlmZddlmZdd	lmZdd5lmZmZddlmZddlmZdd
lmZmZddl m!Z!Gd�d�Z"e"�Z#y)�)�List�Dict�Any�Optional)�embedding_service)�qdrant_service)�llm_service)�
create_client�Client)�settings)�logger)�QdrantVectorStore)�ChatTogether)�ChatPromptTemplate�MessagesPlaceholder)�create_retrieval_chain)�create_stuff_documents_chain)�HumanMessage�	AIMessage)�RunnableConfigc
���eZdZd�Zd
dedeeefd�Zdgfdededeeedeeeefd	eee	ff6d7�Z8dgfdededeeedeeeeffd�Zded	eee	ffd�Zy)�9RAGServicec��ttjtj�|_ttjtjd��|_y)Ngffffff�?)�model�together_api_key�temperature)	r10r�SUPABASE_URL�SUPABASE_SERVICE_KEY�clientr�	LLM_MODEL�TOGETHER_API_KEY�llm)�selfs �)D:\lumina\backend\services\rag_service.py�__init__zRAGService.__init__sC��+��!�!��)�)�11��� ��$�$�%�6�6��12���N�collection_name�selected_documentsc�d�tj|�}ddi}|r5ddlm}m}m}||D�cgc]}|d||������c}��}	|	|d	<|j
|�13�}14d}tjd|ftd
��dg�}t|j|�}
t|15|
�}|Scc}w)z,Create a RAG chain for a specific collection�k�r)�Filter�FieldCondition�16MatchValue�document_id)�value)�key�match)�must�filter)�
search_kwargsa`You are an expert educational assistant. 17Your goal is to provide accurate, well-structured, and comprehensive answers based strictly on the provided context.18 19Guidelines:201. **Format:** Use **Markdown** for all responses. Use headers, bullet points, and bold text to improve readability.212. **Citations:** Always cite your sources implicitly or explicitly if relevant (e.g., "According to [Source 1]...").223. **Accuracy:** If the answer is not in the context, state clearly: "I couldn't find the answer in the provided documents."234. **Tone:** Professional, encouraging, and educational.24 25Context:26{context}�system�chat_history)�
variable_name)�humanz{input})
r�get_vector_store�qdrant_client.modelsr,r-r.�as_retrieverr�
from_messagesrrr"r)r#r'r(�vector_storer5r,r-r.�doc_id�
qdrant_filter�	retriever�
system_prompt�prompt�question_answer_chain�	rag_chains               r$�_get_retrieval_chainzRAGService._get_retrieval_chain s���&�6�6��G���a��
��O�O�#�27%7�	�%7�&�#�)�(�v�6��%7�	��M�'4�M�(�#� �-�-�M�-�J�	�28
�
�$�1�1�
�}�%��n�=� �329���!=�T�X�X�v� N��*�9�6K�L�	����Gs�B-�30project_id�questionr7�returnc��vK�	d|��}|j||�}g}|D]P}|ddk(r|jt|d����*|ddk(s�3|jt|d����R|j	||d���d{���}	g}31d	|	vr�t|	d	�D]�\}}|jjd32d�}
|jjdd
�}|
dk(ri|rg	|jjd�jd�jd|�j�}|jr|jdd}
|33j||
|jdddzd����|	d|34d�S7��#Y�5xYw#t$r'}t!j"dt%|�����d}~wwxYw�w)z.Generate answer using RAG pipeline (LangChain)�project_�role�user�content�rN�	assistant��inputr7N�context�
document_name�Unknownr/��	documents�filename�idr�d�...�r?�doc_name�35chunk_text�answer�r_�sourceszError in RAG pipeline: )rF�appendrr�ainvoke�	enumerate�metadata�getr�table�select�eq�execute�data�page_content�	Exceptionr
�error�str)r#rGrHr(r7r'�chain�history_messages�msg�responsera�i�docr]r?�res�es                 r$�36get_answerzRAGService.get_answerRs�����/	� (���5�O��-�-�o�?Q�R�E� "��#���v�;�&�(�$�+�+�L��Y��,P�Q���[�K�/�$�+�+�I�c�)�n�,M�N�	$�#�]�]�!� 0�,���H��G��H�$�'���(;�<�F�A�s�"�|�|�/�/���K�H� �\�\�-�-�m�R�@�F� �9�,��&�"&�+�+�"3�"3�K�"@�"G�"G�37�"S�"V�"V�W[�]c�"d�"l�"l�"n�C�"�x�x�+.�8�8�A�;�z�+B���N�N�"(�$,�&)�&6�&6�t��&<�u�&D�$��=�(#�8�,�"��
�7��&&����	��L�L�2�3�q�6�(�;�<���	�s[�F9�A
F�7F�	E=�38AF�(A&E?�.F�<F9�=F�?F�F�	F6�"F1�1F6�6F9c	��K�	d|��}|j||�}g}|D]P}|ddk(r|jt|d����*|ddk(s�3|jt|d����Rd}	g}39|j	||d��23d	{���}d40|vr|d41���d|vs�|	r�|dD]�}|j42j
dd
�}
|j43j
dd�}|
d
k(ri|rg	|jjd�jd�jd|�j�}|jr|jdd}
|44j||
|jd	ddzd������7��#Y�.xYw6dd	l}d|j|45������y	#t $r<}t#j$dt'|����dt'|������Yd	}~y	d	}~wwxYw�w)z=Generate answer using RAG pipeline with streaming (LangChain)rKrLrMrNrOrPFrQNr_rSrTrUr/rVrWrXrYrrZr[r\z46 47__SOURCES__:zError in RAG stream: zError: )rFrbrr�astreamrerfrrgrhrirjrkrl�json�dumpsrmr
rnro)r#rGrHr(r7r'rprqrr�sources_sent�sources_data�chunkrur]r?rvr{rws                  r$�get_answer_streamzRAGService.get_answer_stream�s�����4	%� (���5�O��-�-�o�?Q�R�E�!��#���v�;�&�(�$�+�+�L��Y��,P�Q���[�K�/�$�+�+�I�c�)�n�,M�N�	$�!�L��L�$�}�}�!� 0�.� �
�e�48�u�$���/�)���%�l�$�Y�/��$'�L�L�$4�$4�_�i�$P��"%�,�,�"2�"2�=�"�"E��$�	�1�f�*�&*�k�k�&7�&7��&D�&K�&K�J�&W�&Z�&Z�[_�ag�&h�&p�&p�&r��#&�8�8�/2�x�x��{�:�/F�H�&�,�,�&,�(0�*-�*:�*:�4�C�*@�5�*H�.�� 0�
��$*�T��% �6
�$�T�Z�Z��%=�$>�?�?���	%��L�L�0��Q���9�:��C��F�8�$�$�$��	%�sy�G+�A
F#�8F#�49F�E=�F�F#�$F#�'AF#�/A&E?�(F#�=F�?F�!F#�"G+�#	G(�,2G#�G+�#G(�(G+c��"K�		|jjd�jd�jd|�j	�}|j50r-t
jd|���|j51ddgd�S	|jjd�jd	�jd|�jd52d�j	�}|j53}|sdgd�Sd
}g}d|��}|D]k}	tj||	dd��d{���}54|55s�(dj|56�}|d|	d�d|�d�z
}|j|	d|	d|57ddddzd���m|sdgd�Sd|dd�d�}t|��g}
|jj!|
��d{���}|j"}	|jjd�j%||d�d��j	�||d�S#t$r#}t
jd|���Yd}~���d}~wwxYw7��7��#t$r"}t
j&d |���Yd}~�_d}~wwxYw#t$r'}t
j&d!t)|�����d}~wwxYw�w)"N�project_summaries�summaryrGz%Returning cached summary for project rr`z Failed to fetch cached summary: rWzid, filename�
upload_status�	completedzNo documents uploaded.rVrKrY��58z--- Document: rXz ---59z60 61rZr[r\zUnable to read content.zpYou are an expert research assistant. 62Here are the introductions/beginnings of the documents in this project:63 64i'z�65 66Please provide a concise and engaging collaborative summary of what these documents are about.67Highlight the main topics and key themes.68rO)rGr�)�on_conflictzFailed to store summary: zError generating summary: )rrgrhrirjrkr
�inform�warningr�get_initial_chunks�joinrbrr"rcrN�upsertrnro)r#rG�69cached_res�	cache_errrsrW�all_intro_textrar'ru�chunks�doc_textrC�messages�summary_text�	store_errrws                 r$�generate_summaryzRAGService.generate_summary�s�����=	�	
O�!�[�[�.�.�/B�C�J�J�9�U�X�X�Ye�gq�r�z�z�|�70��?�?��K�K�"G�71�|� T�U�",�/�/�!�"4�Y�"?�#%���#��{�{�(�(��5�<�<�^�L�O�O�P\�^h�i�l�l�m|�J�K�S�S�U�H� �
�
�I��":�r�J�J��N��G� (���5�O� ��-�@�@��RU�VZ�R[�]^�_�_���#�y�y��0�H�"��s�:��6G�v�h�Z�W[�&\�\�N��N�N�c�$�i�S��_�dj�kl�dm�nr�or�ds�v{�d{�#|�}�!�"�";��K�K���������F�%�V�4�5�H�!�X�X�-�-�h�7�7�H�#�+�+�L�
F����!�!�"5�6�=�=�",�+�?� ,�>�-�.5�W�Y�72'�"��
��Y�
O����!A�)��M�N�N��
O��`��$8���
F����8���D�E�E��
F���	��L�L�5�c�!�f�X�>�?���	�s��J�BG:�J�A+I�1J�2+I�H)�I�%AI�1J�24I�&H,�'I�8=H.�5I�9J�:	H&�H!�I�!H&�&I�,I�.	I�7I�I�I�I�	J�%"J�J�J)N)
�__name__�73__module__�__qualname__r%rorrrFrrrxr�r��r&r$rrs���74�0�C�0�X�VZ�[^�V_�M`�0�l37�-/�7��7��7�%�T�#�Y�/�	7�75�4��S��>�*�7�76�c�3�h��
7�z37�-/�<%��<%��<%�%�T�#�Y�/�	<%�77�4��S��>�*�<%�|C��C��c�3�h��Cr&rN)$�typingrrrr�services.embedding_servicer�services.qdrant_servicer�services.llm_servicer	�supabaser78r�config.settingsr�utils.loggerr
�langchain_qdrantr�langchain_togetherr�langchain_core.promptsrr�langchain.chainsr�"langchain.chains.combine_documentsr�langchain_core.messagesrr�langchain_core.runnablesrr�rag_servicer�r&r$�<module>r�sJ��,�,�8�2�,�*�$��/�+�J�3�K�;�3�z�z�x�l�r&