
    sOi                         d dl Z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 d dl	m
Z
 d dlmZmZmZmZmZmZ d dlmZ d dlZd dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lm Z! d dl"m#Z#m$Z$m%Z% dZ& G d de      Z'y)    N)deepcopy)TextIOWrapper)Any	GeneratorIterableMappingSequenceget_args)uuid4)show_warningshow_warning_once)to_dict)
QdrantBase)common_types)models)LocalCollectionDEFAULT_VECTOR_NAMEignore_mentioned_ids_filterz	meta.jsonc            !       L    e Zd ZdZdZd|dededdf fdZedefd       Z	d	e
ddfd
Zd}dZd}dZdedefdZ	 	 	 	 	 	 	 d~dedej"                  ee   z  eeee   f   z  ej,                  z  ej.                  z  dej0                  dz  dej2                  dz  dededz  deee   z  ej6                  z  deee   z  dedz  d	e
deej8                     fdZ	 	 	 	 ddedej0                  dz  dedededz  d	e
dej<                  fdZ	 	 	 	 ddedej0                  dz  dedededz  d	e
dej@                  fdZ!dedejD                  dz  dedz  dejF                  dz  deejD                  e$ejJ                     f   f
dZ&deejN                     ejN                  z  dz  dedeejN                     fd Z(dejN                  dedejN                  fd!Z)	 	 	 	 	 	 	 	 	 	 	 ddedejD                  dz  dedz  dejN                  eejN                     z  dz  dej0                  dz  dej2                  dz  dededz  deee   z  ej6                  z  deee   z  dedz  dejF                  dz  d	e
dejT                  fd"Z+ded#eejX                     d	e
deejT                     fd$Z-	 	 	 	 	 	 	 	 	 	 	 	 dded%edejJ                  ee   z  eee      z  ej\                  z  ejD                  z  ej"                  z  ej^                  z  ej`                  z  ejb                  z  dz  dedz  dejN                  eejN                     z  dz  dej0                  dz  dej2                  dz  ded&edeee   z  ej6                  z  deee   z  dedz  d'ejd                  dz  dejF                  dz  d	e
dejf                  f d(Z4	 	 	 	 	 	 dded)ej0                  dz  ded*ejj                  dz  dejJ                  dz  deee   z  ej6                  z  deee   z  d	e
deeejl                     ejJ                  dz  f   fd+Z7	 	 dded,ej0                  dz  d-ed	e
dejp                  f
d.Z9	 	 	 dded/ed0ej0                  dz  ded-ed	e
dejt                  fd1Z;	 	 dded2ejx                  d3ej0                  dz  d4ejz                  dz  d	e
dej|                  fd5Z?	 dded2eej                     d3ej0                  dz  d	e
dej|                  f
d6ZAded7ee   d2ej                  d	e
dej|                  f
d8ZC	 	 dded9eejJ                     deee   z  ej6                  z  deee   z  d	e
deejl                     fd:ZDeEdd;edej|                  fd<       ZFded=ej                  d	e
dej|                  fd>ZG	 dded?ej                  d2ej                  d/edz  d	e
dej|                  fd@ZIded?ej                  d2ej                  d	e
dej|                  f
dAZJdedBee   d2ej                  d	e
dej|                  f
dCZKded=ej                  d	e
dej|                  fdDZLdedEeej                     d	e
deej|                     fdFZNdGeej                     d	e
defdHZPded	e
dej                  fdIZRd	e
dej                  fdJZSd	e
dej                  fdKZUded	e
dej                  fdLZWded	e
defdMZX	 	 ddedNeYeej                  f   dz  dOej                  dz  d	e
def
dPZ[dededz  fdQZ\ded	e
defdRZ]	 	 	 ddedSej                  eYeej                  f   z  dz  dNeYeej                  f   dz  dOej                  dz  d	e
defdTZ_	 	 	 ddedSej                  eYeej                  f   z  dz  dNeYeej                  f   dz  dOej                  dz  d	e
defdUZ`	 	 dded2eaej                     d3ej0                  dz  d4ejz                  dz  d	e
ddfdVZc	 	 dded2eaej                  ejl                  z     d3ej0                  dz  d4ejz                  dz  ddf
dWZd	 	 	 	 dded7eeeej"                  f   ej"                  z  eaej                     z  d?eaeee
e
f      dz  d9eaejJ                     dz  d3ej0                  dz  d4ejz                  dz  d	e
ddfdXZg	 	 ddedYedZej                  dz  d[ej                  dz  d	e
dej|                  fd\ZidedYed	e
dej|                  fd]Zjded	e
deej                     fd^Zlded	e
dej                  dz  fd_Zmded`ed	e
defdaZnd	e
deej                     fdbZod	e
dej                  fdcZpd`ed	e
defddZqdeded	e
defdeZrdedfed	e
deej                     fdgZsdedfed	e
dej                  dz  fdhZtdedfed`ed	e
def
diZudedfeded	e
def
djZv	 	 	 ddedkej                  dledz  dmedz  dnee   dz  d	e
defdoZxdedkej                  d	e
defdpZydej                  fdqZ{dedrej                  d	e
defdsZ}dedej                  fdtZdej                   fduZdefdvZdwed	e
defdxZded	e
dej                  fdyZded	e
dej                  fdzZd	e
dej                  fd{Z xZS )QdrantLocalaD  
    Everything Qdrant server can do, but locally.

    Use this implementation to run vector search without running a Qdrant server.
    Everything that works with local Qdrant will work with server Qdrant as well.

    Use for small-scale data, demos, and tests.
    If you need more speed or size, use Qdrant server.
    i N  locationforce_disable_check_same_threadreturnNc                     t         |           || _        || _        |dk7  | _        i | _        i | _        d| _        | j                          d| _	        y)a$  
        Initialize local Qdrant.

        Args:
            location: Where to store data. Can be a path to a directory or `:memory:` for in-memory storage.
            force_disable_check_same_thread: Disable SQLite check_same_thread check. Use only if you know what you are doing.
        z:memory:NF)
super__init__r   r   
persistentcollectionsaliases_flock_file_load_closed)selfr   r   	__class__s      g/volume1/homes/robertsu/coba/app/.venv/lib/python3.12/site-packages/qdrant_client/local/qdrant_local.pyr   zQdrantLocal.__init__0   sR     	/N, "j079')15

"    c                     | j                   S N)r"   r#   s    r%   closedzQdrantLocal.closedB   s    ||r&   kwargsc                    d| _         | j                  j                         D ]K  }||j                          t	        dt        | j                  j                                t        d       M 	 | j                  Q| j                  j                  s:dd l
}|j                  | j                         | j                  j                          y y y # t        $ r Y y w xY w)NTzLCollection appears to be None before closing. The existing collections are:    )messagecategory
stacklevelr   )r"   r   valuescloser   listkeysUserWarningr    r*   portalockerunlock	TypeError)r#   r+   
collectionr6   s       r%   r2   zQdrantLocal.closeF   s    **113J%  "jD,,113457( 		 4		+D4D4D4K4K" ""4#3#34  &&( 5L+  		s   1AC 	CCc                 .   d}| j                   sy t        j                  j                  | j                  t
              }t        j                  j                  |      s_t        j                  | j                  d       t        |d      5 }|j                  t        j                  i i d             d d d        nt        |d      5 }t        j                  |      }|d   j                         D ]  \  }}|D ]  }|j                  |d         t        j                   di |}| j#                  |      }	t%        ||	| j&                        }
|
| j(                  |<   t+        |
j,                        | j.                  kD  st1        d	| j.                  d
d| dt+        |
j,                         dt2        d        |d   | _        d d d        t        j                  j                  | j                  d      }t        j                  j                  |      sGt        j                  | j                  d       t        |d      5 }|j                  d       d d d        t        |d      | _        dd l}	 |j;                  | j6                  |j<                  j>                  |j<                  j@                  z         y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# |jB                  jD                  $ r tG        d| j                   d      w xY w)N)	init_fromTexist_okwr   r   rr   )r   z=Local mode is not recommended for collections with more than ,z points. Collection <z> contains zd points. Consider using Qdrant in Docker or Qdrant Cloud for better performance with large datasets.   )r/   r0   r   z.lockztmp lock filezr+r   zStorage folder zw is already accessed by another instance of Qdrant client. If you require concurrent access, use Qdrant server instead. )$r   ospathjoinr   META_INFO_FILENAMEexistsmakedirsopenwritejsondumpsloaditemspoprest_modelsCreateCollection_collection_pathr   r   r   lenidsLARGE_DATA_THRESHOLDr   r5   r   r    r6   lock	LockFlags	EXCLUSIVENON_BLOCKING
exceptionsLockExceptionRuntimeError)r#   deprecated_config_fields	meta_pathfmetacollection_nameconfig_jsonkeyconfigcollection_pathr9   lock_file_pathr6   s                r%   r!   zQdrantLocal._load^   s   #1 GGLL0BC	ww~~i(KK5i%

2"#EFG &% i%yy|484G4M4M4O0O[0  $T2 1 )99HKHF&*&;&;O&LO!0'8<8\8\"J
 9CD$$_5:>>*T-F-FF$[#88; <++:*;;s:>>GZF[ \33
 &1'( 5P0  $I5 &8 dmmW=ww~~n-KK5nc*a( +5		  %%//+2G2G2T2TTU &% &%> +* %%33 	!$-- 1P Q 	s9   
(J<B7K AKK4AK! <KKK!3Lc                    | j                   sy | j                  rt        d      t        j                  j                  | j                  t              }t        |d      5 }|j                  t        j                  | j                  j                         D ci c]  \  }}|t        |j                         c}}| j                   d             d d d        y c c}}w # 1 sw Y   y xY w)N=QdrantLocal instance is closed. Please create a new instance.r>   r?   )r   r*   r]   rD   rE   rF   r   rG   rJ   rK   rL   rM   r   rO   r   re   r   )r#   r_   r`   rb   r9   s        r%   _savezQdrantLocal._save   s    ;;^__GGLL0BC	)S!QGG

 @D?O?O?U?U?W(?W ; ,WZ5F5F-GG?W( $(<<
 "!(	 "!s   8C C7CCC(rb   c                     | j                   rt        d      || j                  v r| j                  |   S || j                  v r| j                  | j                  |      S t	        d| d      )Nri   Collection 
 not found)r*   r]   r   r   
ValueErrorr#   rb   s     r%   _get_collectionzQdrantLocal._get_collection   so    ;;^__d...##O44dll*##DLL$ABB;&7zBCCr&   query_vectorquery_filtersearch_paramslimitoffsetwith_payloadwith_vectorsscore_thresholdc
           	      T    | j                  |      }|j                  |||||||	      S )N)rq   rr   rt   ru   rv   rw   rx   )rp   search)r#   rb   rq   rr   rs   rt   ru   rv   rw   rx   r+   r9   s               r%   rz   zQdrantLocal.search   sA    " ))/:
  %%%%+ ! 
 	
r&   sampleusingc                 N    | j                  |      }|j                  ||||      S N)rr   rt   r{   r|   )rp   search_matrix_offsetsr#   rb   rr   rt   r{   r|   r+   r9   s           r%   r   z!QdrantLocal.search_matrix_offsets   s5     ))/:
//%U6 0 
 	
r&   c                 N    | j                  |      }|j                  ||||      S r~   )rp   search_matrix_pairsr   s           r%   r   zQdrantLocal.search_matrix_pairs   s5     ))/:
--%U6 . 
 	
r&   querylookup_fromc           	      ~   |r|j                   n| j                        ||nt        }||j                  |j                  n|j                  v }j
                  v }|rj                  n|rj
                  nj                  t               dt        j                  dt        j                  ffd}t        |      }t        |t        j                        r ||j                        |_        |fS t        |t        j                        r|j                   j"                  9|j                   j"                  D 	cg c]
  }	 ||	       c}	|j                   _        |j                   j$                  9|j                   j$                  D 	cg c]
  }	 ||	       c}	|j                   _        |fS t        |t        j&                        r ||j(                  j*                        |j(                  _        t        |j(                  j,                  t.              r|j(                  j,                  n|j(                  j,                  g}
|
D cg c]9  }t        j0                   ||j$                         ||j"                              ; c}|j(                  _        |fS t        |t        j2                        rt        |j,                  t.              r|j,                  n|j,                  g}
|
D cg c]9  }t        j0                   ||j$                         ||j"                              ; c}|_        |fS t        |t        j4                        r	 |fS t        |t        j6                        r	 |fS t        |t        j8                        r	 |fS c c}	w c c}	w c c}w c c}w )z
        Resolves any possible ids into vectors and returns a new query object, along with a set of the mentioned
        point ids that should be filtered when searching.
        vector_inputr   c                    t        | t        t        j                              rt        | t        j
                        rt        |       } | }|j                  vrt        d| d      j                  |   }	v r		   |   }nt        d	 d      t        |t        j                        r|j                         }k(  rj                  |       |S | S )NzPoint z is not found in the collectionzVector rm   )
isinstancer
   typesPointIduuidUUIDstrrU   rn   npndarraytolistadd)
r   point_ididxvecr9   rb   collection_vectorslookup_collection_namementioned_idsvector_names
       r%   input_into_vectorz;QdrantLocal._resolve_query_input.<locals>.input_into_vector  s     ,(?@lDII6#&|#4L':>>1$vhZ7V%WXX nnX."44,[9#>C$w{m:%FGGc2::.**,C"&<<!%%h/
##r&   )positivenegative)r9   rp   r   vectorsparse_vectorsmultivectorsvectorssetr   VectorInputr   r   rQ   NearestQuerynearestRecommendQuery	recommendr   r   DiscoverQuerydiscovertargetcontextr3   ContextPairContextQueryOrderByQueryFusionQueryRrfQuery)r#   rb   r   r|   r   search_in_vector_namesparsemultir   r   pairspairr9   r   r   r   r   s    `          @@@@@r%   _resolve_query_inputz QdrantLocal._resolve_query_input   ss    <G!7!7O))*@A
).):@S &;+=+=+I & 	 
 9 99z666!+!:!:!+!8!8!+!3!3 -0E	$++	$	$ 	$. e[556-emm<EMT m##Q {99:''3HMH`H`,H`%l3H`,( ''3HMH`H`,H`%l3H`,(D m##= {889$5enn6K6K$LENN! enn44d; &&nn,,-  "&
 "D	 ''.t}}=.t}}= "&ENN". m##! {778%/t%DEMM5==/E "
 "D	 ''.t}}=.t}}= "EM m## {778 m## {667 m## {334m##M,,&s   N+ N0>N5>N:prefetchc                    |g S t        |t              rt        |      dk(  rg S g }t        |t        j                        rF|g}|j                  t        |j                  t              r|j                  n|j                  g       nt        |t              rt        |      }|D cg c]  }|| j                  ||       c}S c c}w )Nr   )	r   r3   rT   r   Prefetchextendr   r	   _resolve_prefetch_input)r#   r   rb   
prefetchess       r%   _resolve_prefetches_inputz%QdrantLocal._resolve_prefetches_inputX  s    
 Ih%#h-1*<I
h/"J%/0A0A4%H!!xO`O`Na (+hJ '
&# ((?C&
 	
 
s   &Cc                 :   |j                   |S t        |      }| j                  ||j                   |j                  |j                        \  }}||_         t        |j                  t        |            |_        | j                  |j                  |      |_	        |S r(   )
r   r   r   r|   r   r   filterr3   r   r   )r#   r   rb   r   r   s        r%   r   z#QdrantLocal._resolve_prefetch_inputr  s     >>!OH%#88NNNN  	 
} 5hootMGZ[ ::8;L;Lo^r&   c                     | j                  |      }|,| j                  ||||      \  }}t        |t        |            }| j	                  ||      }|j                  |||||||xs d|	|
	      S )Nr   )	r   r   rr   r|   rx   rt   ru   rv   rw   )rp   r   r   r3   r   query_points)r#   rb   r   r|   r   rr   rs   rt   ru   rv   rw   rx   r   r+   r9   r   s                   r%   r   zQdrantLocal.query_points  s      ))/:
#'#<#<{$ E= 7|T-EXYL11(OL&&%+;Q%% ' 

 
	
r&   requestsc                 0   |D cg c]  }| j                  ||j                  |j                  |j                  |j                  xs d|j
                  |j                  |j                  |j                  |j                  |j                         c}S c c}w )N
   )rb   r   r   rr   rt   ru   rv   rw   rx   r|   r   )r   r   r   r   rt   ru   rv   with_vectorrx   r|   r   )r#   rb   r   r+   requests        r%   query_batch_pointszQdrantLocal.query_batch_points  s    ( $
 $  /mm ))$^^mm)r~~$11$00 ' 7 7mm#//   $
 	
 
s   BBgroup_by
group_sizewith_lookupc                 <   | j                  |      }|,| j                  ||||      \  }}t        |t        |            }d }|=t	        |t
              r| j                  |      }n| j                  |j                        }|j                  |||||||	|
||||      S )N)r   rr   r|   r   rt   r   r   rv   rw   rx   r   with_lookup_collection)rp   r   r   r3   r   r   r9   query_groups)r#   rb   r   r   r|   r   rr   rs   rt   r   rv   rw   rx   r   r   r+   r9   r   r   s                      r%   query_points_groupszQdrantLocal.query_points_groups  s    6 ))/:
#'#<#<{$ E= 7|T-EXYL!%"+s+)-)=)=k)J&)-)=)=k>T>T)U&&&%!%%+##9 ' 
 	
r&   scroll_filterorder_byc                 R    | j                  |      }	|	j                  ||||||      S )N)r   rt   r   ru   rv   rw   )rp   scroll)
r#   rb   r   rt   r   ru   rv   rw   r+   r9   s
             r%   r   zQdrantLocal.scroll  s>     ))/:
  '%% ! 
 	
r&   count_filterexactc                 H    | j                  |      }|j                  |      S )N)r   )rp   count)r#   rb   r   r   r+   r9   s         r%   r   zQdrantLocal.count  s(     ))/:
\::r&   rd   facet_filterc                 L    | j                  |      }|j                  |||      S )N)rd   r   rt   )rp   facet)r#   rb   rd   r   rt   r   r+   r9   s           r%   r   zQdrantLocal.facet  s,     ))/:
Cl%PPr&   pointsupdate_filterupdate_modec                 l    | j                  |      }|j                  |||       | j                         S Nr   r   )rp   upsert_default_update_result)r#   rb   r   r   r   r+   r9   s          r%   r   zQdrantLocal.upsert&  s8     ))/:
&;W**,,r&   c                 j    | j                  |      }|j                  ||       | j                         S )N)r   )rp   update_vectorsr   )r#   rb   r   r   r+   r9   s         r%   r   zQdrantLocal.update_vectors2  s6     ))/:
!!&!F**,,r&   r   c                 h    | j                  |      }|j                  ||       | j                         S r(   )rp   delete_vectorsr   )r#   rb   r   r   r+   r9   s         r%   r   zQdrantLocal.delete_vectors=  s3     ))/:
!!'62**,,r&   rU   c                 J    | j                  |      }|j                  |||      S r(   )rp   retrieve)r#   rb   rU   rv   rw   r+   r9   s          r%   r   zQdrantLocal.retrieveH  s)     ))/:
""3lCCr&   operation_idc                 `    t        j                  |t        j                  j                        S )N)r   status)r   UpdateResultrQ   UpdateStatus	COMPLETED)clsr   s     r%   r   z"QdrantLocal._default_update_resultS  s'    !!%++55
 	
r&   points_selectorc                 f    | j                  |      }|j                  |       | j                         S r(   )rp   deleter   r#   rb   r   r+   r9   s        r%   r   zQdrantLocal.deleteZ  s1     ))/:
/***,,r&   payloadc                 l    | j                  |      }|j                  |||       | j                         S )N)r   selectorrd   )rp   set_payloadr   )r#   rb   r   r   rd   r+   r9   s          r%   r   zQdrantLocal.set_payloada  s8     ))/:
wSI**,,r&   c                 j    | j                  |      }|j                  ||       | j                         S )N)r   r   )rp   overwrite_payloadr   )r#   rb   r   r   r+   r9   s         r%   r   zQdrantLocal.overwrite_payloadm  s6     ))/:
$$Wv$F**,,r&   r4   c                 j    | j                  |      }|j                  ||       | j                         S )N)r4   r   )rp   delete_payloadr   )r#   rb   r4   r   r+   r9   s         r%   r   zQdrantLocal.delete_payloadx  s6     ))/:
!!tf!=**,,r&   c                 h    | j                  |      }|j                  |       | j                         S )N)r   )rp   clear_payloadr   r   s        r%   r   zQdrantLocal.clear_payload  s4     ))/:
  / :**,,r&   update_operationsc                     | j                  |      }|j                  |       | j                         gt        |      z  S r(   )rp   batch_update_pointsr   rT   )r#   rb   r   r+   r9   s        r%   r   zQdrantLocal.batch_update_points  s@     ))/:
&&'89++-.5F1GGGr&   change_aliases_operationsc                    |D ]A  }t        |t        j                        r]| j                  |j                  j
                         |j                  j
                  | j                  |j                  j                  <   {t        |t        j                        r1| j                  j                  |j                  j                  d        t        |t        j                        rV|j                  j                  }|j                  j                  }| j                  j                  |      | j                  |<   6t        d|        | j!                          y)NzUnknown operation: T)r   rQ   CreateAliasOperationrp   create_aliasrb   r   
alias_nameDeleteAliasOperationrP   delete_aliasRenameAliasOperationrename_aliasnew_alias_nameold_alias_namern   rj   )r#   r   r+   	operationnew_nameold_names         r%   update_collection_aliasesz%QdrantLocal.update_collection_aliases  s    3I)[%E%EF$$Y%;%;%K%KL**:: Y33>>? I{'G'GH  !7!7!B!BDII{'G'GH$11@@$11@@)-)9)9()CX& #6yk!BCC 3 	

r&   c           
          | j                   rt        d      t        j                  | j                  j                         D cg c]!  \  }}||k(  rt        j                  ||      # c}}      S c c}}w Nri   )r  rb   )r   r*   r]   r   CollectionsAliasesResponser   rO   rQ   AliasDescription)r#   rb   r+   r  names        r%   get_collection_aliasesz"QdrantLocal.get_collection_aliases  s{     ;;^__// )-(:(:(<
 )=$J?* ,,)$( )=	
 		
s   &A3
c           
          | j                   rt        d      t        j                  | j                  j                         D cg c]  \  }}t        j                  ||       c}}      S c c}}w r  r  )r#   r+   r  r  s       r%   get_aliaseszQdrantLocal.get_aliases  sq    ;;^__// )-(:(:(<
 )=$J	 ,,)$( )=
 	
s   !A.
c           	          | j                   rt        d      t        j                  | j                  j                         D cg c]  \  }}t        j                  |       c}}      S c c}}w )Nri   )r  )r   )r*   r]   r   CollectionsResponser   rO   rQ   CollectionDescription)r#   r+   r  _s       r%   get_collectionszQdrantLocal.get_collections  sh    ;;^__((  $//5577GD! 11t<7
 	
s    A-
c                 D    | j                  |      }|j                         S r(   )rp   info)r#   rb   r+   r9   s       r%   get_collectionzQdrantLocal.get_collection  s    ))/:
  r&   c                 F    	 | j                  |       y# t        $ r Y yw xY w)NTF)rp   rn   r#   rb   r+   s      r%   collection_existszQdrantLocal.collection_exists  s*    	  1 		s    	  sparse_vectors_configmetadatac                 \   | j                  |      }d}|,|j                         D ]  \  }}|j                  ||        d}|X|j                  j                  &|j                  j                  j                  |       nt        |      |j                  _        d}| j                          |S )NFT)rp   rO   update_sparse_vectors_configre   r"  updater   rj   )	r#   rb   r!  r"  r+   _collectionupdatedr   vector_paramss	            r%   update_collectionzQdrantLocal.update_collection  s     **?; ,.C.I.I.K*]88mT /LG!!**6""++228<.6x.@""+G

r&   c                 r    | j                   r+t        j                  j                  | j                  d|      S y )Nr9   )r   rD   rE   rF   r   ro   s     r%   rS   zQdrantLocal._collection_path  s'    ??77<<|_MMr&   c                 \   | j                   rt        d      | j                  j                  |d       }~| j                  j                         D ci c]  \  }}||k7  r|| c}}| _        | j                  |      }|t        j                  |d       | j                          yc c}}w )Nri   T)ignore_errors)
r*   r]   r   rP   r   rO   rS   shutilrmtreerj   )r#   rb   r+   r&  r  r  rf   s          r%   delete_collectionzQdrantLocal.delete_collection  s    ;;^__&&**?DA %)LL$6$6$8
$8 
D& $8

 //@&MM/>


s   B(vectors_configc           	      t   | j                   rt        d      || j                  v rt        d| d      | j	                  |      }|t        j                  |d       t        t        j                  |xs i |t        |            || j                        }|| j                  |<   | j                          y)Nri   rl   z already existsTr<   )r   r   r"  )r   r   )r*   r]   r   rn   rS   rD   rI   r   rQ   rR   r   r   rj   )r#   rb   r0  r!  r"  r+   rf   r9   s           r%   create_collectionzQdrantLocal.create_collection  s     ;;^__d...{?*;?KLL//@&KK$7$((&,"4!(+
 %,0,P,P

 -7)

r&   c                 N    | j                  |       | j                  ||||      S )N)r"  )r/  r2  )r#   rb   r0  r!  r"  r+   s         r%   recreate_collectionzQdrantLocal.recreate_collection+  s4     	/%%^-BX & 
 	
r&   c                 .    | j                  ||||       y r   )_upload_points)r#   rb   r   r   r   r+   s         r%   upload_pointszQdrantLocal.upload_points8  s      	V=k 	 	
r&   c                     | j                  |      }|j                  |D cg c]@  }t        j                  |j                  |j
                  xs i |j                  xs i       B c}||       y c c}w )Nidr   r   r   )rp   r   rQ   PointStructr:  r   r   )r#   rb   r   r   r   r9   points          r%   r6  zQdrantLocal._upload_pointsE  s     ))/:
 $ $E ''xx <<-2!MM/R
 $ (# 	 	
s   AA1c                    dt         t        d d f   fd}| j                  |      }	t        |t              rt        d |j                         D              rt        t        |j                         D 
cg c]  }
|
j                  d    c}
            dk(  sJ d       t        t        |j                                     j                  d   }t        |      D cg c]5  }|j                         D ci c]  }|||   |   j                          c}7 }}}|	j                  t!        |xs  |       t        |      |xs t#        j$                  i g            D cg c]u  \  }}}t'        j(                  t        |t*        j,                        rt        |      n|t        |t.        j0                        r|j                         n|xs i |xs i       w c}}}||       y c c}
w c c}w c c}}w c c}}}w )	Nr   c               3   8   K   	 t        t                      wr(   )r   r   rC   r&   r%   uuid_generatorz5QdrantLocal.upload_collection.<locals>.uuid_generatore  s     %'l" s   c              3   P   K   | ]  }t        |t        j                           y wr(   )r   r   r   ).0vs     r%   	<genexpr>z0QdrantLocal.upload_collection.<locals>.<genexpr>j  s     ,aP`1Z2::-FP`s   $&r      z8Each named vector should have the same number of vectorsr9  r   )r   r   rp   r   dictanyr1   rT   r   shapenextiterranger4   r   r   zip	itertoolscyclerQ   r;  r   r   r   r   )r#   rb   r   r   rU   r   r   r+   r?  r9   arrnum_vectorsir  r   r   s                   r%   upload_collectionzQdrantLocal.upload_collectionZ  s   	#	#tT/ : 	# ))/:
gt$,aPWP^P^P`,a)aC1AB1A#11ABCDIJIJI tGNN$456<<Q?K {++A >E\\^L^Twt}Q'..00^L+  
 	 47+>+M4yt444/Xvw ''(28TYY(Gs8}X/9&"**/MFMMOSY`^`#Mr
4 (# 	 	
 C Ms%   2G$G.1G)G.A:G4)G.
field_namefield_schema
field_typec                 H    t        dt        dd       | j                         S )NiPayload indexes have no effect in the local Qdrant. Please use server Qdrant if you need payload indexes.zcreate-local-payload-indexesrB   r.   r/   r   r0   r   r5   r   )r#   rb   rR  rS  rT  r+   s         r%   create_payload_indexz QdrantLocal.create_payload_index  s)     	 .		
 **,,r&   c                 H    t        dt        dd       | j                         S )NrV  zdelete-local-payload-indexesrB   rW  rX  )r#   rb   rR  r+   s       r%   delete_payload_indexz QdrantLocal.delete_payload_index  s)     	 .		
 **,,r&   c                     g S r(   rC   r  s      r%   list_snapshotszQdrantLocal.list_snapshots  	     	r&   c                     t        d      NzeSnapshots are not supported in the local Qdrant. Please use server Qdrant if you need full snapshots.NotImplementedErrorr  s      r%   create_snapshotzQdrantLocal.create_snapshot  s     "s
 	
r&   snapshot_namec                     t        d      r`  ra  )r#   rb   rd  r+   s       r%   delete_snapshotzQdrantLocal.delete_snapshot      !s
 	
r&   c                     g S r(   rC   r#   r+   s     r%   list_full_snapshotszQdrantLocal.list_full_snapshots  s    	r&   c                     t        d      r`  ra  ri  s     r%   create_full_snapshotz QdrantLocal.create_full_snapshot  rg  r&   c                     t        d      r`  ra  )r#   rd  r+   s      r%   delete_full_snapshotz QdrantLocal.delete_full_snapshot  rg  r&   c                     t        d      r`  ra  )r#   rb   r   r+   s       r%   recover_snapshotzQdrantLocal.recover_snapshot  rg  r&   shard_idc                     g S r(   rC   r#   rb   rq  r+   s       r%   list_shard_snapshotsz QdrantLocal.list_shard_snapshots  r^  r&   c                     t        d      Nz`Snapshots are not supported in the local Qdrant. Please use server Qdrant if you need snapshots.ra  rs  s       r%   create_shard_snapshotz!QdrantLocal.create_shard_snapshot       "n
 	
r&   c                     t        d      rv  ra  )r#   rb   rq  rd  r+   s        r%   delete_shard_snapshotz!QdrantLocal.delete_shard_snapshot  rx  r&   c                     t        d      rv  ra  )r#   rb   rq  r   r+   s        r%   recover_shard_snapshotz"QdrantLocal.recover_shard_snapshot  s     "n
 	
r&   	shard_keyshards_numberreplication_factor	placementc                     t        d      Nz]Sharding is not supported in the local Qdrant. Please use server Qdrant if you need sharding.ra  )r#   rb   r}  r~  r  r  r+   s          r%   create_shard_keyzQdrantLocal.create_shard_key  s     "k
 	
r&   c                     t        d      r  ra  )r#   rb   r}  r+   s       r%   delete_shard_keyzQdrantLocal.delete_shard_key  s     "k
 	
r&   c                 p    t         j                  j                  d      }t        j                  d|d       S )Nzqdrant-clientzqdrant - vector search engine)titleversioncommit)	importlibr"  r  rQ   VersionInfo)r#   r  s     r%   r  zQdrantLocal.info  s2    $$,,_=&&174
 	
r&   cluster_operationc                     t        d      )NznCluster collection update is not supported in the local Qdrant. Please use server Qdrant if you need a clusterra  )r#   rb   r  r+   s       r%   cluster_collection_updatez%QdrantLocal.cluster_collection_update   s     "=
 	
r&   c                     t        d      )NzlCollection cluster info is not supported in the local Qdrant. Please use server Qdrant if you need a clusterra  ro   s     r%   collection_cluster_infoz#QdrantLocal.collection_cluster_info      !=
 	
r&   c                     t        d      )NzcCluster status is not supported in the local Qdrant. Please use server Qdrant if you need a clusterra  r)   s    r%   cluster_statuszQdrantLocal.cluster_status  r  r&   c                     t        d      )NziRecover current peer is not supported in the local Qdrant. Please use server Qdrant if you need a clusterra  r)   s    r%   recover_current_peerz QdrantLocal.recover_current_peer  r  r&   peer_idc                     t        d      )NzeRemove peer info is not supported in the local Qdrant. Please use server Qdrant if you need a clusterra  )r#   r  r+   s      r%   remove_peerzQdrantLocal.remove_peer  r  r&   c                     t        d      )NzQGet optimizations is not supported in the local Qdrant. Please use server Qdrant.ra  r  s      r%   get_optimizationszQdrantLocal.get_optimizations#  s    
 "b
 	
r&   c                     t        d      )NzdList shard keys is not supported in the local Qdrant. Please use server Qdrant if you need sharding.ra  r  s      r%   list_shard_keyszQdrantLocal.list_shard_keys,  s    
 "=
 	
r&   c                     t        d      )NzgCluster telemetry is not supported in the local Qdrant. Please use server Qdrant if you need a cluster.ra  ri  s     r%   cluster_telemetryzQdrantLocal.cluster_telemetry6  s     ">
 	
r&   )F)r   N)NNr   NTFN)N   r   N)NNNNNr   NTFNN)NNNNNr   r  TFNNN)Nr   NNTF)NT)Nr   F)NNr(   )TF)r   )NNN)NNNN)__name__
__module____qualname____doc__rV   r   boolr   propertyr*   r   r2   r!   rj   r   rp   r   
NumpyArrayr	   floattupler3   NamedVectorNamedSparseVectorFilterSearchParamsintPayloadSelectorScoredPointrz   SearchMatrixOffsetsResponser   SearchMatrixPairsResponser   QueryLookupLocationr   r   r   r   r   r   QueryResponser   QueryRequestr   SparseVectorDocumentImageInferenceObjectWithLookupInterfaceGroupsResultr   OrderByRecordr   CountResultr   FacetResponser   Points
UpdateModer   r   PointVectorsr   PointsSelectorr   r   classmethodr   r   Payloadr   r   r   r   UpdateOperationr   AliasOperationsr  r  r  r  r  r  CollectionInfor  r   r   SparseVectorParamsr)  rS   r/  VectorParamsr2  r4  r   r;  r7  r6  rE  VectorStructrQ  PayloadSchemaTyperY  r[  SnapshotDescriptionr]  rc  rf  rj  rl  rn  rp  rt  rw  rz  r|  ShardKeyr  r  r  r  ClusterOperationsr  CollectionClusterInfor  ClusterStatusr  r  r  OptimizationsResponser  ShardKeysResponser  DistributedTelemetryDatar  __classcell__)r$   s   @r%   r   r   #   s    "# #t #X\ #$   c d 0:x*Ds D D$ -137!EI-2(,

 &&
5/
T%[ 
!" 

 
!
!	"
 llT)
 ))D0
 
 d

 Xc]*U-B-BB
 Xc]*
 
 
  
e	 !
> -1 

 llT)
 	

 
 Tz
 
 
	*	*
" -1 

 llT)
 	

 
 Tz
 
 
	(	(
e$e$ {{T!e$ Tz	e$
 ))D0e$ 
u{{C..	/e$N
5>>*U^^;dB
 
 
enn		
49<	0 %) AE,037!EI-2(,37$
$
 {{T!$
 Tz	$

 ..4#77$>$
 llT)$
 ))D0$
 $
 d
$
 Xc]*U-B-BB$
 Xc]*$
 $
 ))D0$
 $
 
		$
L

 5--.
 	

 
e!!	"
H  AE,037EI-2(,8<3715
5
 5
 }}
u+
tE{
 

 ++	
 

 .. ++ 

  		5
 Tz5
 ..4#77$>5
  llT)!5
" ))D0#5
$ %5
& '5
( Xc]*U-B-BB)5
* Xc]*+5
, -5
. ..5/5
0 ))D015
2 35
4 
		55
t .2)-'+EI-2

 ||d*
 	

 --$&
 $
 Xc]*U-B-BB
 Xc]*
 
 
tELL!5==4#77	8
0 -1	;; llT); 	;
 ; 
		; -1
Q
Q 
Q llT)	
Q
 
Q 
Q 
Q 
		
Q  .2/3
-
- 
- ||d*	
-
 %%,
- 
- 
		
-  .2		-	- ++,	- ||d*		-
 	- 
			-	-	- #	- $$		-
 	- 
			- FJ-2	D	D emm$	D Xc]*U-B-BB		D
 Xc]*	D 	D 
ell		D 
# 
e>P>P 
 
-"-5:5I5I-UX-			- 
-
- 
- $$	
-
 4Z
- 
- 
		
-	-	- 	- $$		-
 	- 
			-	-	- sm	- $$		-
 	- 
			--"-5:5I5I-UX-			-HH $E$9$9:H 	H
 
e  	!H)1%2G2G)HTW	(
"
.1
		)	)
"
C 
E,L,L 
	
 	
0I0I 	
!c !S !UEYEY !    PT)-	  'sE,D,D'DEL --$&	
  
0 d
    ( X\OS)- **WS%:L:L5L-MMPTT  'sE,D,D'DEL	
 --$&  
D X\OS)-

 **WS%:L:L5L-MMPTT
  'sE,D,D'DEL	

 --$&
 
 

" .2/3

 **+
 ||d*	

 %%,
 
 

" .2/3

 **U\\9:
 ||d*	

 %%,
 

2 48.2-1/3+
+
 c5+++,u/?/??(5K]K]B^^+
 $sCx.)D0	+

 emm$t++
 ||d*+
 %%,+
 +
 
+
b 8<59-- - --4	-
 ++d2- - 
		- 	-"	-03	-?B	-				-".1	e''	(

"
.1
		"	"T	)

s 
3 
RU 
Z^ 

C D9R9R4S 
S 
U5N5N 


# 
 
 


 
s 
c 
VZ 

".1=@	e''	(

"
.1
=@
		"	"T	)

"
.1
BE
QT
	
	
	
 	
 		

 	
 
	
 %))-&*

 >>
 Tz	

  $J
 9t#
 
 



 >>
 	

 


e'' 
	
	
 !22	
 		

 
	

s 
u?Z?Z 

 3 3 

d 

3 
# 
$ 


 
 
	$	$	


 
 
	 	 	


 
	'	'
r&   r   )(importlib.metadatar  rL  rL   rD   r-  r   copyr   ior   typingr   r   r   r   r	   r
   r   numpyr   $qdrant_client.common.client_warningsr   r   qdrant_client._pydantic_compatr   qdrant_client.client_baser   qdrant_client.conversionsr   r   qdrant_client.httpr   rQ   $qdrant_client.local.local_collectionr   r   r   rG   r   rC   r&   r%   <module>r     s^       	        P 2 0 ; 4  ! Z
* Z
r&   