
    Ai                     X    d dl Z d dlZd dlZd dlZd dlmZmZ h dZ G d d          Z	dS )    N)ListDict>	   textdoc_idchunk_iddoc_name	tenant_id
source_urlchunk_orderpage_numbersection_headingc                       e Zd ZdZdefdZedej        dej        fd            Z	ede
fd            Zdej        d	ee
         fd
Zddej        defdZdefdZedefd            ZdS )
FaissStorezb
    Enterprise-grade FAISS vector store with
    strict metadata validation (POC compliant).
    dimc                 T    || _         t          j        |          | _        g | _        d S )N)r   faissIndexFlatIPindexmeta)selfr   s     MC:\Users\Terasoftware\OneDrive\Desktop\Graph Rag\rag_suite\rag\vectorstore.py__init__zFaissStore.__init__   s&    &s++
 "			    vectorsreturnc                 V    t           j                            | dd          dz   }| |z  S )N   T)axiskeepdimsg-q=)nplinalgnorm)r   r"   s     r   
_normalizezFaissStore._normalize"   s*    y~~gA~==E~r   r   c                     t           t          |                                           z
  }|rt          d|           d S )Nz"Missing required metadata fields: )REQUIRED_META_FIELDSsetkeys
ValueError)r   missings     r   _validate_metadatazFaissStore._validate_metadata(   sK    &TYY[[)9)99 	>W>>  	 	r   	metadatasc                 P   t          |          t          |          k    rt          d          |                     |                    d                    }|D ]}|                     |           | j                            |           | j                            |           d S )Nz$Vectors and metadata length mismatchfloat32)	lenr(   r#   astyper*   r   addr   extend)r   r   r+   ms       r   r0   zFaissStore.add3   s    w<<3y>>) 	ECDDD//'..";";<< 	' 	'A##A&&&&
w	#####r      	query_veckc                 H   |                      |                    d                    }| j                            ||          \  }}g }t	          |d         |d                   D ]<\  }}|dk    r|                    t          |          | j        |         d           =|S )Nr-   r   )scoremetadata)r#   r/   r   searchzipappendfloatr   )r   r4   r5   scoresindicesresultsr8   idxs           r   r:   zFaissStore.searchB   s    OOI$4$4Y$?$?@@	*++Iq99fQi44 	 	JE3by NNu IcN      r   pathc                    t          j        |d           t          j        | j        t           j                            |d                     t          t           j                            |d          dd          5 }t          j	        | j
        t          | j                  | j        d|d	d
           d d d            d S # 1 swxY w Y   d S )NT)exist_okindex.faiss	meta.jsonwutf-8encoding)r   countr      F)indentensure_ascii)osmakedirsr   write_indexr   rB   joinopenjsondumpr   r.   r   )r   rB   fs      r   savezFaissStore.saveS   s   
D4((((JGLL}--	
 	
 	

 "',,t[113III 
	QI8 ^^ I 
 "	 	 	 	
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	s   ?9CC	C	c                    t           j                            |d          }t           j                            |d          }t           j                            |          rt           j                            |          st	          d          t          j        |          }t          |dd          5 }t          j	        |          }d d d            n# 1 swxY w Y    | |d                   }||_
        |d	         |_        |S )
NrE   rF   z!FAISS index or metadata not foundrrH   rI   r   )r   r   )rO   rB   rR   existsFileNotFoundErrorr   
read_indexrS   rT   loadr   r   )clsrB   
index_path	meta_pathr   rV   objstores           r   r]   zFaissStore.loadh   s   W\\$66
GLL{33	w~~j)) 	I	1J1J 	I#$GHHH ,,)S7333 	q)A,,C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 E
###[
s   4CCCN)r3   )__name__
__module____qualname____doc__intr   staticmethodr    ndarrayr#   r   r*   r   r0   r:   strrW   classmethodr]    r   r   r   r      s%        
#C # # # # BJ 2:    \
     \
$2: 
$$t* 
$ 
$ 
$ 
$ 
 s    "    *     [  r   r   )
rO   rT   r   numpyr    typingr   r   r%   r   rl   r   r   <module>ro      s    				              
 
 
 c c c c c c c c c cr   