Ë
    uPêjû  ã                   óT   — d dl mZmZ d dlmZmZ d dlmZ d dlm	Z	m
Z
  G d„ d«      Zy)é    )ÚAnyÚFinal)ÚAllMessageValuesÚChatCompletionUserMessage)ÚModelResponse)ÚVectorStoreResultContentÚVectorStoreSearchResponsec            
       óÖ   — e Zd ZdZedee   dedz  fd„«       Zedee	   de
fd„«       Ze	 dded	ed
e	dz  defd„«       Zede	deeeee	f   z     fd„«       Zede	de	dee	   fd„«       Zy)ÚRAGQueryz
Context:

ÚmessagesÚreturnNc                 ó4  — | rt        | «      dk(  ry| d   }t        |t        «      rd|vry|d   }t        |t        «      r|S t        |t        «      rFt        |«      dkD  r8|D ]3  }t        |t        «      sŒ|j                  d«      dk(  sŒ)d|v sŒ.|d   c S  y)z?
        Extract the query from the last user message.
        r   NéÿÿÿÿÚcontentÚtypeÚtext)ÚlenÚ
isinstanceÚdictÚstrÚlistÚget)r   Úlast_messager   Úitems       úZ/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/rag/rag_query.pyÚextract_query_from_messagesz$RAGQuery.extract_query_from_messages   sŸ   € ñ
 œ3˜x›=¨AÒ-Øà& r™lˆÜ˜,¬Ô-°À,Ñ1NØà% iÑ0ˆä�gœsÔ#ØˆNÜ˜¤Ô&¬3¨w«<¸!Ò+;àò (�Ü˜d¤DÕ)¨d¯h©h°vÓ.>À&Ó.HÈVÐW[Ê^Ø ™<Ò'ð(ð ó    Úcontext_chunksc                 ó  — t         j                  }| D ]s  }t        |t        «      rH|j	                  d«      }|r$|D ]  }|j	                  d«      }|sŒ||dz   z  }Œ  ŒJd|v sŒO||d   dz   z  }Œ[t        |t
        «      sŒl||dz   z  }Œu d|dœS )zE
        Process search results and build a context message.
        r   r   z

Úuser)Úroler   )r   ÚCONTENT_PREFIX_STRINGr   r   r   r   )r   Úcontext_contentÚchunkÚresult_contentÚcontent_itemÚcontent_texts         r   Úbuild_context_messagezRAGQuery.build_context_message&   s³   € ô
 #×8Ñ8ˆà#ò 	2ˆEÜ˜%¤Ô&ØHMÏ	É	ÐR[ÓH\�Ù!Ø(6ò E˜Ø3?×3CÑ3CÀFÓ3K˜Ú'Ø+¨|¸fÑ/DÑD™OñEð ˜u’_Ø# u¨V¡}°vÑ'=Ñ=‘OÜ˜E¤3Õ'Ø 5¨6¡>Ñ1‘ð	2ð Ø&ñ
ð 	
r   ÚresponseÚsearch_resultsÚrerank_resultsc                 óÌ   — t        | d«      rW| j                  rK| j                  D ]<  }t        |dd«      }|€Œt        |dd«      xs i }||d<   |r||d<   t        |d|«       Œ> | S )z=
        Add search results to the response choices.
        ÚchoicesÚmessageNÚprovider_specific_fieldsr*   r+   )Úhasattrr-   ÚgetattrÚsetattr)r)   r*   r+   Úchoicer.   Úprovider_fieldss         r   Úadd_search_results_to_responsez'RAGQuery.add_search_results_to_response?   s‰   € ô �8˜YÔ'¨H×,<Ò,<Ø"×*Ñ*ò R�Ü! &¨)°TÓ:�ØÑ&ä&-¨gÐ7QÐSWÓ&XÒ&^Ð\^�Oð 9G�OÐ$4Ñ5Ù%Ø<J˜Ð(8Ñ9ô ˜GÐ%?ÀÕQðRð ˆr   Úsearch_responsec                 óà   — g }| j                  dg «      D ]V  }|j                  dg «      }|D ]=  }|j                  d«      dk(  sŒ|j                  d«      sŒ*|j                  |d   «       Œ? ŒX |S )z9Extract text documents from vector store search response.Údatar   r   r   )r   Úappend)r6   Ú	documentsÚresultÚcontent_listr   s        r   Úextract_documents_from_searchz&RAGQuery.extract_documents_from_searchX   sz   € ð
 8:ˆ	Ø%×)Ñ)¨&°"Ó5ò 	6ˆFØ!Ÿ:™: i°Ó4ˆLØ'ò 6�Ø—;‘;˜vÓ&¨&Ó0°W·[±[ÀÕ5HØ×$Ñ$ W¨V¡_Õ5ñ6ð	6ð
 Ðr   Úrerank_responsec                 óÊ   — g }| j                  dg «      }|j                  dg «      D ]9  }|j                  d«      }|€Œ|t        |«      k  sŒ&|j                  ||   «       Œ; |S )zJGet the original search results corresponding to the top reranked results.r8   ÚresultsÚindex)r   r   r9   )r6   r>   Ú
top_chunksÚoriginal_resultsr;   rA   s         r   Úget_top_chunks_from_rerankz#RAGQuery.get_top_chunks_from_reranke   su   € ð ˆ
Ø"1×"5Ñ"5°f¸bÓ"AÐØ%×)Ñ)¨)°RÓ8ò 	;ˆFØ—J‘J˜wÓ'ˆEØÑ  U¬SÐ1AÓ-BÓ%BØ×!Ñ!Ð"2°5Ñ"9Õ:ð	;ð Ðr   )N)Ú__name__Ú
__module__Ú__qualname__r"   Ústaticmethodr   r   r   r   r   r   r(   r   r	   r5   r   r=   rD   © r   r   r   r      s   „ Ø*Ðàð¨dÐ3CÑ.Dð ÈÈtÉò ó ðð. ð
¨d°3©ið 
Ð<Uò 
ó ð
ð0 ð &*ñØðà1ðð ˜d™
ðð 
ò	ó ðð0 ð
Øð
à	ˆc�D˜˜c˜‘NÑ"Ñ	#ò
ó ð
ð ð°Cð È#ð ÐRVÐWZÑR[ò ó ñr   r   N)Útypingr   r   Úlitellm.types.llms.openair   r   Úlitellm.types.utilsr   Úlitellm.types.vector_storesr   r	   r   rI   r   r   ú<module>rN      s   ðß ç QÝ -÷÷cò cr   