
    L#{j                     b    d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	  G d d          Z
d ZdS )	    N)Document)OpenAIEmbeddings)settings)hotel_pinecone_servicehotel_private_pinecone_servicec                   p    e Zd ZdefdZdefdZddee         dedee	         fdZ
dee	         defd	Zd
S )HotelRAGServicereturnc                     t           j        st          d          t          t           j        t           j        d          S )Nz!OpenAI API key is not configured.i   )modelopenai_api_key
dimensions)r   OPENAI_API_KEY
ValueErrorr   EMBEDDING_MODEL)selfs    ?/var/www/html/ls-pms-bot-apis/app/services/hotel_rag_service.py_get_embeddingszHotelRAGService._get_embeddings	   sC    & 	B@AAA*#2
 
 
 	
    c                     g }t           t          fD ]7}|j        r.|j        r'|                    |                                           8|st          d          |S )NzZNo hotel Pinecone indexes configured. Set message-center and/or private index credentials.)r   r   pc
index_nameappend	get_indexr   )r   indexesservices      r   _available_indexesz"HotelRAGService._available_indexes   sv    .0NO 	4 	4Gz 4g0 4w0022333 	G   r      querieskc                 
  K   d |D             }|sg S |                                  |                                 }|                    |           d{V }dt          t                   ffdfd|D             }t          j        |  d{V }g }t                      }	|D ]}
t          |
dg           pg }|D ]}t          |dd          pi }|	                    d          p|	                    d	          }|
                    dd           |sX||	                    d
          p|	                    d          pdf}||	v r|	                    |           |                    t          ||                     Ō|S )zGBatch-embed queries, then search all configured hotel Pinecone indexes.c                     g | ]?}t          |t                    |                                +|                                @S  )
isinstancestrstrip).0qs     r   
<listcomp>z8HotelRAGService._safe_retrieve_batch.<locals>.<listcomp>!   sA    ZZZAs9K9KZPQPWPWPYPYZ17799ZZZr   Nvectorc                 P   K   t          j        | j        |dd           d {V S )NTF)r*   top_kinclude_metadatainclude_values)asyncio	to_threadquery)indexr*   r    s     r   _query_indexz:HotelRAGService._safe_retrieve_batch.<locals>._query_index)   sP       *!%$         r   c                 2    g | ]}D ]} ||          S r#   r#   )r'   r*   r2   r3   r   s      r   r)   z8HotelRAGService._safe_retrieve_batch.<locals>.<listcomp>2   sL     
 
 
 
 
  L''
 
 
 
r   matchesmetadatacontenttextsourceurl )page_contentr6   )r   r   aembed_documentslistfloatr/   gathersetgetattrgetpopaddr   r   )r   r   r    cleaned_queries
embeddingsquery_vectorstasksresults	documents	seen_keysresultr5   matchr6   r7   keyr3   r   s     `             @@r   _safe_retrieve_batchz$HotelRAGService._safe_retrieve_batch   s     ZZgZZZ 	I))++))++
(99/JJJJJJJJ	d5k 	 	 	 	 	 	
 
 
 
 
'
 
 

  .......$&	*-%%	 	T 	TFfi44:G  T T"5*d;;Ar",,y11IX\\&5I5IY--- X 6 6 S(,,u:M:M SQST)##c"""  w!R!R!RSSSST r   docsc           	          d}|D ]w}|j         pi }|                    dd          }|j        pd                                }|                    dd           p|                    dd           }|d| d| d| d	z  }x|S )
Nr;   titlezN/Ar9   r:   z
<source>
<title>z</title>
<content>z</content>
<url>z</url>
</source>
)r6   rC   r<   r&   )r   rQ   multiline_stringdocr6   rS   r7   r:   s           r   format_documentsz HotelRAGService.format_documentsN   s     	 	C \/RHLL%00E'-24466G,,x..K(,,ud2K2KC #      r   N)r   )__name__
__module____qualname__r   r   r>   r   r%   intr   rP   rV   r#   r   r   r	   r	      s        
!1 
 
 
 

D 
 
 
 
- -$s) - -DQYN - - - -^ T(^              r   r	   c                      t                      S )N)r	   r#   r   r   get_hotel_rag_servicer\   c   s    r   )r/   langchain_core.documentsr   langchain_openair   app.core.configr   app.services.pinecone_servicer   r   r	   r\   r#   r   r   <module>ra      s     - - - - - - - - - - - - $ $ $ $ $ $ ` ` ` ` ` ` ` `X  X  X  X  X  X  X  X v    r   