
    AHj                     `    d dl mZmZmZ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DictListOptionalUnion)AllMessageValuesChatCompletionUserMessage)ModelResponse)VectorStoreResultContentVectorStoreSearchResponsec            
           e Zd ZdZedee   dee   fd       Z	edee
   defd       Ze	 dded	ed
ee
   defd       Zede
deeeeee
f   f      fd       Zede
de
dee
   fd       Zy)RAGQueryz
Context:

messagesreturnc                 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       M/root/tools/cai/cai_env/lib/python3.12/site-packages/litellm/rag/rag_query.pyextract_query_from_messagesz$RAGQuery.extract_query_from_messages   s    
 3x=A-|,-,1Ny)gs#N&3w<!+; (tT*(F2$<'(     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# 	2E%&KP99L "(6 E6B6F6Fv6N'+|f/DDOE u_#uV}v'==OE3'56>1	2  &
 	
r    N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.   )hasattrr0   getattrsetattr)r,   r-   r.   choicer1   provider_fieldss         r   add_search_results_to_responsez'RAGQuery.add_search_results_to_responseE   s     8Y'H,<,<"** R!&)T:&  )CTJPb $
 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)r9   	documentsresultcontent_listr   s        r   extract_documents_from_searchz&RAGQuery.extract_documents_from_search`   sz    
 79	%))&"5 	6F!::i4L' 6;;v&&0W[[5H$$WV_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.r;   resultsindex)r   r   r<   )r9   rA   
top_chunksoriginal_resultsr>   rD   s         r   get_top_chunks_from_rerankz#RAGQuery.get_top_chunks_from_rerankm   su    
 
*..vr:%)))R8 	;FJJw'E US1A-B%B!!"25"9:	; r    )N)__name__
__module____qualname__r%   staticmethodr   r   r   r   r   r   r	   r+   r
   r   r8   r   r   r@   rG    r    r   r   r      s   *d3C.D RU  6 
d3i 
<U 
 
4  )-1 ! 
	 4 

	eCc3h'(	)
 
 

/2
	c
 
r    r   N)typingr   r   r   r   r   litellm.types.llms.openair   r	   litellm.types.utilsr
   litellm.types.vector_storesr   r   r   rL   r    r   <module>rQ      s"    3 3 Q -m mr    