
    J-jw
                     b   U d dl Z d dlZd dlmZmZmZ  e j                  e      Zda	ej                  dz  ed<   dej                  fdZefdedej                  fdZded	ee   d
eee      dee   dee   deeef   fdZdedee   dedee   fdZefdeddfdZefdeddfdZdedefdZy)    N)CHROMA_PERSIST_DIRDEFAULT_COLLECTION	MIN_SCORE_clientreturnc                      t         :t        j                  dd       t        j                  t        t                    a t         S )NT)parentsexist_ok)path)r   r   mkdirchromadbPersistentClientstr     -/var/www/vps2.regionflexible.com/rag/store.py_get_clientr      s2      =++5G1HINr   namec                 <    t               j                  | ddi      S )Nz
hnsw:spacecosine)r   metadata)r   get_or_create_collectionr   s    r   get_collectionr      s'    =11) 2  r   collection_nameids
embeddings	documents	metadatasc                    	 t        |       }|j                  |      }t        |d         	t        	fd|D              }t	        |      |z
  }|j                  ||||       ||fS )N)r   r   c              3   ,   K   | ]  }|vsd   yw)   Nr   ).0iexisting_sets     r   	<genexpr>zupsert.<locals>.<genexpr>%   s     8a!<"78s   	)r   r   r   r   )r   getsetsumlenupsert)
r   r   r   r   r   collexistingaddedskippedr%   s
            @r   r+   r+      st     /*DxxCx Hx'L8388E#hGKK	   '>r   query_embeddingtop_kc           
         t        |       }|j                         }|dk(  rg S t        ||      }|j                  |g|g d      }g }t	        |d   d   |d   d   |d   d         D ]V  \  }}	}
t        dd|
z
        }|t        k  r |j                  |||	j                  d	d
      |	j                  dd      |	d       X |j                  d d       |S )Nr   )r   r   	distances)query_embeddings	n_resultsincluder   r   r3   g        g      ?source chunk_index)textscorer7   r9   r   c                     | d   S )Nr;   r   )hs    r   <lambda>z#similarity_search.<locals>.<lambda>T   s
    AgJ r   T)keyreverse)
r   countminqueryzipmaxr   appendr'   sort)r   r0   r1   r,   rA   nresultshitsdocmetadistr;   s               r   similarity_searchrN   0   s   
 /*DJJLEz	E5Ajj)*7  G DQQQ 
T4
 Ct$9((8R0#xxq9 	

$ 	II&I5Kr   c                     	 t               j                  |        t        j                  d|  d       y # t        $ r%}t        j                  d|  d|        Y d }~y d }~ww xY w)Nu   Colección 'z' eliminada.u#   No se pudo eliminar la colección 'z': )r   delete_collectionloggerinfo	Exceptionwarning)r   excs     r   rP   rP   X   s\    M''-l4&56 M<TF#cUKLLMs   25 	A#AA#
collectionc                     t        |        y )N)rP   )rV   s    r   resetrX   `   s
    j!r   c                 V    	 t               j                  |        y# t        $ r Y yw xY w)NTF)r   r   rS   r   s    r   collection_existsrZ   d   s,    $$T* s    	(()loggingr   
rag.configr   r   r   	getLogger__name__rQ   r   r   __annotations__r   r   
Collectionr   listfloatdicttupleintr+   rN   rP   rX   boolrZ   r   r   r   <module>rg      s:     H H			8	$,0	"	"T	) 0X..   2  h6I6I 	c T%[! Cy	
 Dz 38_*%%%[% % 
$Z	%P #5 MC M M / "c "4 "C D r   