
    'h(                         d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dl	Z	dZ
dZdZdZdZdZd	Zd
Z G d d      Z G d d      Zy)    N)ListDictz./.faiss_dbz./toolfnB.jsonz./ToolReception.jsonz./ToolRoomService.jsonz./ToolTechHelp.jsonz./ToolConcierge.jsonz./ToolMaintenance.jsonz./ToolSecurity.jsonc                   6    e Zd Zd Zdedej                  fdZy)JinaEmbeddingc                      d| _         d| _        y )NzAjina_e6e06cc026404b7da095afeff164160daM5ZSelCfisibWfUt-5GVp173yUni   )api_key	dimensionselfs    1/home/kushmeetdev/Regenta/Chatbot/vector_store.py__init__zJinaEmbedding.__init__   s    Z    contentreturnc                    t        d|d d  d       d}d| j                  ddd|igd	}d
d| j                   d}	 t        j                  |||      }|j                          |j                         }t        j                  |d   d   d   t        j                        S # t        $ r}t        d|        Y d }~y d }~ww xY w)NzGenerating new embedding for: 2   ...z!https://api.jina.ai/v1/embeddingszjina-embeddings-v3Tfloattext)model
dimensions
normalizedembedding_typeinputzapplication/jsonzBearer )zContent-TypeAuthorization)headersjsondatar   	embedding)dtypezError in embedding: )printr	   r   requestspostraise_for_statusr   nparrayfloat32	Exception)r   r   jina_api_urlpayloadr   responseresultes           r   embed_documentzJinaEmbedding.embed_document   s    .ws|nC@A:)..%w'(
 /&t||n5

	}}\7QH%%']]_F88F6N1-k:"**MM 	(,-	s   A%B# #	C,B??CN)__name__
__module____qualname__r   strr%   ndarrayr.    r   r   r   r      s    c bjj r   r   c                       e Zd Zd Zd ZdededefdZd Z	dede
e   defd	Zdedefd
ZdedededefdZdefdZdefdZdefdZdefdZdefdZdefdZdefdZy)VectorStorec                     t               | _        | j                  j                  | _        t        j                  t
        d       | j                         | _        y )NT)exist_ok)r   embedding_modelr	   osmakedirsDB_PATHinitialize_collectionscollectionsr
   s    r   r   zVectorStore.__init__1   s>    ,--77
Gd+668r   c           
          d g d dd g d dd g d dd g d dd g d dd g d dd g d dd}|D ]4  }| j                  |||         rt        d|        't        d|        6 | j                  |       |S )N)indexmetadata
embeddings)FnB	ReceptionRoomServiceTechHelp	ConciergeMaintenanceSecurityz&Successfully loaded saved collection: zNo saved collection found for: )load_saved_collectionr!   load_from_json_files)r   r>   names      r   r=   z"VectorStore.initialize_collections7   s    !rF#'RtL%)rN"&BdK#'RtL%)rN"&BdK
   	@D))$D0AB>tfEF7v>?		@ 	!!+.r   rL   
collectionr   c                 <   t         j                  j                  t        | d      }t         j                  j                  t        | d      }t         j                  j                  t        | d      }t	        d |||fD              sy	 t        j                  |      |d<   t        |d      5 }t        j                  |      |d<   d d d        t        j                  |      |d	<   y
# 1 sw Y   "xY w# t        $ r}t        d| d|        Y d }~yd }~ww xY w)N.index_metadata.json_embeddings.npyc              3   Z   K   | ]#  }t         j                  j                  |       % y w)N)r:   pathexists).0ps     r   	<genexpr>z4VectorStore.load_saved_collection.<locals>.<genexpr>S   s     [277>>!$[s   )+Fr@   rrA   rB   TzError loading saved collection : )r:   rS   joinr<   allfaiss
read_indexopenr   loadr%   r(   r!   )r   rL   rM   
index_pathmetadata_pathembeddings_pathfr-   s           r   rJ   z!VectorStore.load_saved_collectionM   s    WW\\'dV6?;
Wn.EF'',,w4&0HI [z=/.Z[[	"'"2"2:">Jw mS) 6Q)-1
:&6 (*ww'?J|$6 6  	3D6A3?@	s0   $C7 1C+
 C7 +C40C7 7	D DDc                    t         t        t        t        t        t
        t        d}|j                         D ]q  \  }}||   d   t        j                  j                  |      s/	 t        |dd      5 }t        j                  |      }d d d        | j                  |||          s y # 1 sw Y   "xY w# t        $ r}t!        d| d|        Y d }~d }~ww xY w)N)rE   rC   rD   rF   rG   rH   rI   r@   rX   zutf-8)encodingzError loading z from JSON: )KB_ROOMSERVICE_FILE_PATHKB_FnB_FILE_PATHKB_RECEPTION_FILE_PATHKB_TECHHELP_FILE_PATHKB_CONCIERGE_FILE_PATHKB_MAINTAINENCE_FILE_PATHKB_SECURITY_FILE_PATHitemsr:   rS   rT   r^   r   r_   initialize_new_collectionr(   r!   )r   r>   kb_filesrL   	file_pathrc   kb_datar-   s           r   rK   z VectorStore.load_from_json_filesf   s    3#/-/4-
  (~~/ 	BOD)4 )1bggnnY6OBiw? /1"&))A,/224+dBST	B/ / ! BN4&QC@AABs0   'B85B,B8,B5	1B88	CCCrq   c                    t        d| d       |D cg c]  }|d   	 c}|D cg c]  }|d   	 c}z   }||z   }g }|D ]1  }| j                  j                  |      }	|	!|j                  |	       3 |rut	        j
                  |      }
t        j                  | j                        }|j                  |
       ||d<   ||d<   |
|d<   | j                  ||       t        d|        y y c c}w c c}w )	Nz Initializing new collection for r   
user_querybot_responser@   rA   rB   zSaved new collection: )r!   r9   r.   appendr%   r&   r\   IndexFlatL2r	   addsave_collection)r   rL   rq   rM   entrytextsrA   rB   r   r   embeddings_arrayr@   s               r   rn   z%VectorStore.initialize_new_collection{   s   0c:; 3::|$:ah=iX]eN>S=iiW$ 
 	-D,,;;DAI$!!),	-
 !xx
3 %%dnn5EII&' #(Jw%-Jz"'7J|$   z2*4&12  ;=is
   C,C1c                    	 t         j                  j                  t        | d      }t	        j
                  |d   |       t         j                  j                  t        | d      }t        |d      5 }t        j                  |d   |       d d d        t         j                  j                  t        | d      }t        j                  ||d          y # 1 sw Y   JxY w# t        $ r}t        d| d	|        Y d }~y d }~ww xY w)
NrO   r@   rP   wrA   rQ   rB   zError saving collection rY   )r:   rS   rZ   r<   r\   write_indexr^   r   dumpr%   saver(   r!   )r   rL   rM   r`   ra   rc   rb   r-   s           r   rx   zVectorStore.save_collection   s    	:g$v?Jj1:> GGLLTF.2IJMmS) 5Q		*Z0!45 !ggll7tfO4LMOGGOZ%=>5 5  	:,TF"QC899	:s1   A3C$ 5CAC$ C!C$ $	D-DDcollection_namequery	n_resultsc                    |sg g ddS | j                   j                  |      }|g g ddS 	 t        j                  |g      }| j                  |   }|d   |d   j
                  dk(  rt        d| d       g g ddS t        ||d   j
                        }|d   j                  ||      \  }}|d   D cg c]  }|t        |d         k  s|d   |    }	}d}
|	r |d   d   dk  r|	d   j                  d	d      }
|d   j                         |	|
dS c c}w # t        $ r!}t        d
| d|        g g ddcY d }~S d }~ww xY w)N 	distancesrA   best_responser@   r   z	Warning: z index is emptyrA   g?rt   zError in query_collection for rY   )r9   r.   r%   r&   r>   ntotalr!   minsearchlengettolistr(   )r   r   r   r   query_embeddingrM   r   indicesidxresults_metadatar   r-   s               r   query_collectionzVectorStore.query_collection   s   !#bII..==eD"!#bII	J hh'89O))/:J'"*j.A.H.HA.M	/!2/BC%'R"MMIz'':'A'ABI!+G!4!;!;OY!WIwGNqzwUX[^_ijt_u[vUv
: 6s ;wwMIaLOc$9 0 3 7 7 K 'q\002,!.   x  	J2?2C2aSIJ!#bII	Js<   AD >8D 6D
D<D D 	E"D>8E>Ec                 ^    t        d|        | j                  d|d      }|d   r|S g g ddS )NzQuerying room service with: rE      r   zhI'll help you with your room service request. Could you please provide more details about what you need?r   )r!   r   r   r   r,   s      r   query_roomservicezVectorStore.query_roomservice   sI    ,UG45&&}eQ?/"M H
 	
r   c                 @    | j                  d|d      }|d   sd|d<   |S )NrC      r   zMI can help you with food and beverage requests. What would you like to order?r   r   s      r   	query_fnbzVectorStore.query_fnb   s-    &&ueQ7o&&uF?#r   c                 @    | j                  d|d      }|d   sd|d<   |S )NrD   r   r   zDI can assist you with reception-related queries. How may I help you?r   r   s      r   query_receptionzVectorStore.query_reception   -    &&{E1=o&&lF?#r   c                 @    | j                  d|d      }|d   sd|d<   |S )NrF      r   zHI can help you with technical issues. What problem are you experiencing?r   r   s      r   query_techhelpzVectorStore.query_techhelp   s-    &&z5!<o&&pF?#r   c                 @    | j                  d|d      }|d   sd|d<   |S )NrG      r   zDI can help you with information related queries. How may I help you?r   r   s      r   query_conciergezVectorStore.query_concierge   r   r   c                 @    | j                  d|d      }|d   sd|d<   |S )NrH      r   zJI can help you with maintenance issues. What problem are you experiencing?r   r   s      r   query_maintenancezVectorStore.query_maintenance   s-    &&}eQ?o&&rF?#r   c                 @    | j                  d|d      }|d   sd|d<   |S )NrI      r   zGI can help you with security issues. What problem are you experiencing?r   r   s      r   query_securityzVectorStore.query_security   s-    &&z5!<o&&oF?#r   N)r/   r0   r1   r   r=   r2   r   boolrJ   rK   r   rn   rx   intr   r   r   r   r   r   r   r   r4   r   r   r6   r6   0   s    9,# 4 D 2B*3c 3DJ 3TX 3<:C :T :$!J !JC !JC !JTX !JF	
s 	
s S C S s C r   r6   )r"   r   r\   numpyr%   r:   typingr   r   hashlibr<   rg   rh   rf   ri   rj   rk   rl   r   r6   r4   r   r   <module>r      sa        	   # / 3 - / 4 -  :K Kr   