
    ug                     l   d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZmZ d dlmZ d dlmZmZmZmZ d dlmZmZmZ d d	lmZm Z m!Z!m"Z" d d
l#m$Z$ d dl%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:  ejv                  e<      Z= G d de e$      Z>y)    N)OptionalSequenceAnyTuplecastDictUnionSet)UUID)override)TableColumn)groupby)CollectionConfigurationInternalConfigurationParameterHNSWConfigurationInternalInvalidConfigurationError)DEFAULT_DATABASEDEFAULT_TENANTSystem)CursorSqlDBParameterValueget_sql)SysDB)InvalidCollectionExceptionNotFoundErrorUniqueConstraintError)add_attributes_to_current_spanOpenTelemetryClientOpenTelemetryGranularitytrace_method)Producer)
CollectionAndSegmentsDatabaseOptionalArgumentSegmentMetadata
CollectionSegmentScopeTenantUnspecifiedUpdateMetadatac                       e Zd ZU eed<   def fdZ edej                        e
d> fd              Ze
efded	ed
eddfd       Ze
efd	ed
edefd       Ze
efd	ed
eddfd       Ze
ddefdee   dee   d
edee   fd       Ze
d	eddfd       Ze
d	edefd       ZdededdfdZ edej                        e
deddfd              Z edej                        e
dddeefded	ededee   dee    dee   de!d
edede"e#e!f   fd              Z$ ed ej                        e
	 	 	 d?d!edee   d"ee   d#ee%   dee   f
d$              Z& ed%ej                        e
ddeeddfdee   d	ee   d
ededee   dee   dee#   fd&              Z'e
d'ede(fd(       Z) ed)ej                        e
d!ededdfd*              Z*ded!eddfd+Z+ ed,ej                        e
eefded
ededdfd-              Z, ed.ej                        e
 e-       fd!edede.ee/      ddfd/              Z0 ed0ej                        e
 e-        e-        e-       fded	e.e   de.ee      de.ee/      ddf
d1              Z1 ed2ej                        d3ee"e2d4f      dee    fd5       Z3 ed6ej                        	 d@ded7e4d8e5dede/d9ee6e      ddfd:       Z7d'ed;edefd<Z8d'e2dee    defd=Z9 xZ:S )ASqlSysDB	_producersystemc                 X    t         |   |       |j                  t              | _        y N)super__init__requirer    _opentelemetry_client)selfr1   	__class__s     M/var/www/openai/venv/lib/python3.12/site-packages/chromadb/db/mixins/sysdb.pyr5   zSqlSysDB.__init__4   s"     %+^^4G%H"    zSqlSysDB.create_segmentreturnNc                 j    t         |           | j                  j                  t              | _        y r3   )r4   start_systeminstancer#   r0   )r8   r9   s    r:   r>   zSqlSysDB.start8   s$     	..x8r;   idnametenantc                    | j                         5 }t        d      }t        d      }| j                         j                  |      j	                  |j
                  |j                  |j                        j                  t        | j                  |            t        |      | j                         j                  |j
                        j                  |      j                  |j
                  t        |      k(              }t        || j                               \  }}		 |j!                  ||	       	 d d d        y # | j#                         $ r}
t%        d| d|       |
d }
~
ww xY w# 1 sw Y   y xY w)N	databasestenants	Database z already exists for tenant )txr   querybuilderintocolumnsrA   rB   	tenant_idinsertr   
uuid_to_dbselectfrom_wherer   parameter_formatexecuteunique_constraint_errorr   )r8   rA   rB   rC   currE   rF   insert_databasesqlparamses              r:   create_databasezSqlSysDB.create_database>   s0    WWY#k*II&G!!#iy~~y7J7JK"4??2#67"4(%%'VGJJ'U7^U7::)??@	  "/43H3H3JKKCC(' Y( //1 +v%@I) Ys*   DE*!D==E'E""E''E**E3c                    | j                         5 }t        d      }| j                         j                  |      j	                  |j
                  |j                        j                  |j                  t        |      k(        j                  |j                  t        |      k(        }t        || j                               \  }}|j                  ||      j                         }|st        d| d| d      |d   t        d| d| d      t        t         | j#                  |d               }	t%        |	|d   |      cd d d        S # 1 sw Y   y xY w)NrE   rG    not found for tenant z. Are you sure it exists?r      rA   rB   rC   )rH   r   rI   rP   rO   rA   rB   rQ   r   rL   r   rR   rS   fetchoner   r   r   uuid_from_dbr%   )
r8   rB   rC   rU   rE   qrW   rX   rowrA   s
             r:   get_databasezSqlSysDB.get_database[   s8   WWY#k*I!!#y!	inn5y~~)==>y**nV.DDE  "!T%:%:%<=KC++c6*335C#v%;F8C\]  1v~#v%;F8C\]  D$"3"3CF";<BV) YYs   D3EEc                    | j                         5 }t        d      }| j                         j                  |      j	                  |j
                  t        |      k(        j	                  |j                  t        |      k(        j                         }t        || j                               \  }}|dz   }|j                  ||      j                         }|st        d| d|       t        d      }	| j                         j                  |	      j	                  |	j                  t        |d         k(        j                         }t        || j                               \  }}|j                  ||       d d d        y # 1 sw Y   y xY w)NrE    RETURNING idrG   r\   collectionsr   )rH   r   rI   rP   rQ   rB   r   rL   deleter   rR   rS   r_   r   database_id)
r8   rB   rC   rU   rE   ra   rW   rX   resultrf   s
             r:   delete_databasezSqlSysDB.delete_databasew   sD   WWY#k*I!!#y!y~~)==>y**nV.DDE  "!T%:%:%<=KC'C[[f-668F#iv5KF8$TUU  .K!!#{#{...2KKL	  "!T%:%:%<=KCKKV$3 YYs   E'FF
limitoffsetc                    | j                         5 }t        d      }| j                         j                  |      j	                  |j
                  |j                        j                  |j                  t        |      k(        j                  |      j                  |t        j                  n|      j                  |j                        }t!        || j#                               \  }}|j%                  ||      j'                         }	|	D 
cg c]3  }
t)        t+        t,        | j/                  |
d               |
d   |      5 c}
cd d d        S c c}
w # 1 sw Y   y xY w)NrE   r   r]   r^   )rH   r   rI   rP   rO   rA   rB   rQ   rL   r   rl   rk   sysmaxsizeorderby
created_atr   rR   rS   fetchallr%   r   r   r`   )r8   rk   rl   rC   rU   rE   ra   rW   rX   rowsrb   s              r:   list_databaseszSqlSysDB.list_databases   s%    WWY#k*I!!#y!	inn5y**nV.DDE#(=CKKe --.  "!T%:%:%<=KC;;sF+446D    C D$"3"3CF";<Q!
   Y Ys   C>E8EEEE!c                    | j                         5 }t        d      }| j                         j                  |      j	                  |j
                        j                  t        |            }t        || j                               \  }}	 |j                  ||       	 d d d        y # | j                         $ r}t        d| d      |d }~ww xY w# 1 sw Y   y xY w)NrF   Tenant  already exists)rH   r   rI   rJ   rK   rA   rM   r   r   rR   rS   rT   r   )r8   rB   rU   rF   insert_tenantrW   rX   rY   s           r:   create_tenantzSqlSysDB.create_tenant   s    WWY#I&G!!#g$t,-	  "-1F1F1HIKCTC( Y //1 T+gdV?,KLRSST Ys*   A9CB''C:C

CCCc                    | j                         5 }t        d      }| j                         j                  |      j	                  |j
                        j                  |j
                  t        |      k(        }t        || j                               \  }}|j                  ||      j                         }|st        d| d      t        |      cd d d        S # 1 sw Y   y xY w)NrF   rv   
 not found)rB   )rH   r   rI   rP   rO   rA   rQ   r   r   rR   rS   r_   r   r+   )r8   rB   rU   rF   ra   rW   rX   rb   s           r:   
get_tenantzSqlSysDB.get_tenant   s    WWY#I&G!!#w

#wzz^D%99:	  "!T%:%:%<=KC++c6*335C#gdV:$>??t$ YYs   CCC&rU   segmentc                    t        t        |d         |d   |d   j                  t        |d         d       t        d      }| j	                         j                  |      j                  |j                  |j                  |j                  |j                        j                  t        | j                  |d               t        |d         t        |d   j                        t        | j                  |d                     }t        || j                               \  }}	 |j!                  ||       t        d	      }|d
   r'	 | j'                  |||j(                  |d   |d
          y y # | j#                         $ r}t%        d|d    d      |d }~ww xY w# t*        $ r}t,        j/                  d|         d }~ww xY w)NrA   typescope
collection
segment_idsegment_typesegment_scoper   segmentsSegment rw   segment_metadatametadataz"Error inserting segment metadata: )r   strvaluer   rI   rJ   rK   rA   r   r   r   rM   r   rN   r   rR   rS   rT   r   _insert_metadatar   	Exceptionloggererror)	r8   rU   r}   r   insert_segmentrW   rX   rY   
metadata_ts	            r:   create_segment_with_txzSqlSysDB.create_segment_with_tx   s   &!'$-0 '!(!1!7!7!',"78		
 $T(^W##	 Vtwt}=>wv/ww/556tw|/DEF	 	  nd.C.C.EFV	KKV$ -.
:
%%))DMJ'  ++- 	'74=/9	   A!EFs0   %E/ %F /FFF	G&F??Gc                 r    | j                         5 }| j                  ||       d d d        y # 1 sw Y   y xY wr3   )rH   r   )r8   r}   rU   s      r:   create_segmentzSqlSysDB.create_segment  s)     WWY#''W5 YYs   -6zSqlSysDB.create_collectionFconfigurationr   r   	dimensionget_or_createdatabasec
                    ||st        d      t        t        |      |d       | j                  |||	      }
|
r9|r(|
d   }| j                  |j                  ||	      d   dfS t        d| d      t        |||||||	d	      }| j                         5 }t        d
      }t        d      }| j                         j                  |      j                  |j                  |j                  |j                  |j                  |j                        j!                  t#        | j%                  |d               t#        |d         t#        |j'                               t#        |d         | j                         j)                  |j                        j+                  |      j-                  |j                  t#        |	      k(        j-                  |j.                  t#        |      k(              }t1        || j3                               \  }}	 |j5                  ||       t        d      }|d   r,| j9                  |||j:                  |j                  |d          |D ]  }| j=                  ||        	 d d d        |dfS # | j7                         $ r}t        d|d    d      |d }~ww xY w# 1 sw Y   |dfS xY w)Nz.id must be specified if get_or_create is Falsecollection_idcollection_name)rB   rC   r   r   )rA   rC   r   FCollection rw   rA   rB   r   r   r   rC   r   versionrf   rE   rA   rB   r   collection_metadatar   T)
ValueErrorr   r   get_collectionsrA   r   r)   rH   r   rI   rJ   rK   rB   config_json_strr   rh   rM   r   rN   to_json_strrO   rP   rQ   rL   r   rR   rS   rT   r   r   r   )r8   rA   rB   r   r   r   r   r   rC   r   existingr   rU   rf   rE   insert_collectionrW   rX   rY   r   r}   s                        r:   create_collectionzSqlSysDB.create_collection  s    :mMNN&!$R#'	
 ''T&8'T%a[
((%==( )  	  ,k$,OPP'	

 WWY#.Kk*I !!#k"NN$$//))++ "4??:d3C#DE":f#56"=#<#<#>?":k#:;%%'VILL)U9%U9>>^H-EEFU9...2HHI . ""3T5J5J5LMKCC(
 45J*%%%,,MMz* $++C9 $Y ^ 4# //1 +!*T"2!3?C= ^ 4s2   E5J1J!AJ1J.J))J..J11J=zSqlSysDB.get_segmentsr   r   r   c                 2   t        t        |      |r|nd|r|j                  ndt        |      d       t        d      }t        d      }| j	                         j                  |      j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  	      j!                  |      j#                  |j                  |j$                  k(        j'                  |j                        }|r6|j)                  |j                  t+        | j-                  |            k(        }|r'|j)                  |j                  t+        |      k(        }|r1|j)                  |j                  t+        |j                        k(        }|r6|j)                  |j                  t+        | j-                  |            k(        }| j/                         5 }t1        || j3                               \  }	}
|j5                  |	|
      j7                         }t9        |d       }g }|D ]  \  }}| j;                  t        |            }t=        |      }t        |d   d         }t?        t        |d   d               }| j;                  |d   d	         }| jA                  |      }|jC                  tE        tG        tH        |      ||||i 
              |cd d d        S # 1 sw Y   y xY w)N r   r   r   c                 (    t        t        | d         S Nr   r   objectrs    r:   <lambda>z'SqlSysDB.get_segments.<locals>.<lambda>  s    fad1Cr;   r   r]         )rA   r   r   r   r   
file_paths)%r   r   r   r   rI   rP   rO   rA   r   r   r   key	str_value	int_valuefloat_value
bool_value	left_joinonr   rp   rQ   r   rN   rH   r   rR   rS   rr   r   r`   listr*   _metadata_from_rowsappendr'   r   r   )r8   r   rA   r   r   
segments_tr   ra   rU   rW   rX   rs   
by_segmentr   r   segment_rowsr   s                    r:   get_segmentszSqlSysDB.get_segmentso  s    	'!"g(,"052!*o		
 :&
-.
U:V  %%$$$$&&%%
 Yz"R
!6!667WZ]]#! 	
$ 
8K)LLMA
>$+??@A
((N5;;,GGHA%%
8S)TTA WWY#!!T%:%:%<=KC;;sF+446D 'CDJH,6(
L&&s:7L)471:$Sa_5!..tAwqz:
33D9b>!##-!)#%	 -7$ / YYs   C>LLzSqlSysDB.get_collectionsc                 
   |||t        d      t        t        |      |r|ndd       t        d      }t        d      }t        d      }	| j	                         j                  |      j                  |j                  |j                  |j                  |j                  |	j                  |	j                  |j                  |j                  |j                  |j                  |j                         j#                  |      j%                  |j                  |j&                  k(        j#                  |	      j%                  |j(                  |	j                  k(        j+                  |j                        }
|r6|
j-                  |j                  t/        | j1                  |            k(        }
|r'|
j-                  |j                  t/        |      k(        }
||r|rt        d      }	|
j-                  |j(                  | j	                         j                  |	j                        j                  |	      j-                  |	j                  t/        |      k(        j-                  |	j                  t/        |      k(        k(        }
| j3                         5 }t5        |
| j7                               \  }}|j9                  ||      j;                         }t=        |d       }g }|D ]  \  }}| j?                  t        |            }tA        |      }t        |d	   d
         }| jC                  |      }|d	   d   rtE        |d	   d         nd}|d	   d   "| jG                  t        |      |d	   d         }n| jI                  ||      }|jK                  tM        tO        tP        |      ||||t        |d	   d         t        |d	   d         d	              ||d	}||||z    }n||d }|cddd       S # 1 sw Y   yxY w)z;Get collections by name, embedding function and/or metadataNzmIf name is specified, tenant and database must also be specified in order to uniquely identify the collectionr   r   rf   r   rE   c                 (    t        t        | d         S r   r   r   s    r:   r   z*SqlSysDB.get_collections.<locals>.<lambda>   s    D14Fr;   r   r]   r   r         r   ))r   r   r   r   rI   rP   rO   rA   rB   r   r   rL   r   r   r   r   r   r   r   r   rh   rp   rQ   r   rN   rH   r   rR   rS   rr   r   r`   r   r   int&_load_config_from_json_str_and_migrate!_insert_config_from_legacy_paramsr   r)   r   r   )r8   rA   rB   rC   r   rk   rl   collections_tr   databases_tra   rU   rW   rX   rs   by_collectionrf   r   collection_rowsr   r   r   s                         r:   r   zSqlSysDB.get_collections  s    83C  	'!$R+/4R	
 m,01
K(U=!V  ""--''  %%$$$$&&%% Yz"R  J$<$<<=Y{#R))[^^;<W]%%&) 	
, ((N4??2;N,OOPA**nT.BBCA :&X,K))$$&'{#{''>(+CCD{,,v0FFGHA WWY#!!T%:%:%<=KC;;sF+446D#D*FGMK2?.&&s='9:O,471:33D9/3AwqzCQ
Ot	71:)$($O$OM*DGAJ%M %)$J$J%x%M ""b>!&3!)"+"471:!$T!WQZ !	' 3@B  >F)&6E>B)&'2[ YYs   EO99Pr   c                     | j                  |      }t        |      dk(  rt        d| d      t        |d   | j	                  |            S )N)rA   r   r   z does not exist.)r   )r   r   )r   lenr   r$   r   )r8   r   rf   s      r:   get_collection_with_segmentsz%SqlSysDB.get_collection_with_segments,  se     **m*<{q ,m_,<=  %"1~&&-&@
 	
r;   zSqlSysDB.delete_segmentc                    t        dt        |      i       t        d      }| j                         j	                  |      j                  |j                  t        | j                  |            k(        j                         }| j                         5 }t        || j                               \  }}|dz   }|j                  ||      j                         }|st        d| d      	 ddd       y# 1 sw Y   yxY w)zDelete a segment from the SysDBr   r   re   r   r{   N)r   r   r   rI   rP   rQ   rA   r   rN   rg   rH   r   rR   rS   r_   r   )	r8   r   rA   tra   rU   rW   rX   ri   s	            r:   delete_segmentzSqlSysDB.delete_segment:  s     	'c"g	

 *U1XU144>$//"*=>>?VX	 	
 WWY#!!T%:%:%<=KC'C[[f-668F#hrd*$=>>  YYs   AC11C:c                 :   t        d      }| j                         j                  |      j                  |j                  t        | j                  |            k(        j                         }t        || j                               \  }}|j                  ||       y )Nr   )r   rI   rP   rQ   r   r   rN   rg   r   rR   rS   )r8   rU   r   r   ra   rW   rX   s          r:   delete_segments_for_collectionz'SqlSysDB.delete_segments_for_collectionT  sz    :&
U:U:((N4??:;V,WWXVX	 	
 a!6!6!89VC r;   zSqlSysDB.delete_collectionc           	         t        dt        |      i       t        d      }t        d      }| j                         j	                  |      j                  |j                  t        | j                  |            k(        j                  |j                  | j                         j                  |j                        j	                  |      j                  |j                  t        |      k(        j                  |j                  t        |      k(        k(        j                         }| j                         5 }t        || j!                               \  }}	|dz   }|j#                  ||	      j%                         }
|
st'        d| d      | j)                  ||       ddd       | j*                  j-                  
d          y# 1 sw Y   (xY w)	z{Delete a collection and all associated segments from the SysDB. Deletes
        the log stream for this collection as well.r   rf   rE   re   r   r{   Nr   )r   r   r   rI   rP   rQ   rA   r   rN   rh   rO   rB   rL   rg   rH   r   rR   rS   r_   r   r   r0   
delete_log)r8   rA   rC   r   r   r   ra   rU   rW   rX   ri   s              r:   delete_collectionzSqlSysDB.delete_collection_  sx    	'R	

 - K(U1XU144>$//"*=>>?U$$&'{#{''>(+CCD{,,v0FFGH VX 	
 WWY#!!T%:%:%<=KC'C[[f-668F#k"Z$@AA//R8  	!!&), Ys   :A&GGzSqlSysDB.update_segmentc                    t        t        |      t        |      d       t        d      }t        d      }| j                         j	                  |      j                  |j                  t        | j                  |            k(        j                  |j                  t        | j                  |                  }| j                         5 }t        || j                               \  }}	|r|j                  ||	       || j                         j                  |      j                  |j                   t        | j                  |            k(        j#                         }t        || j                               \  }}	|j                  ||	       nd|t%               k7  rWt'        t(        |      }t'        t(        |      }| j+                  |||j                   ||t        |j-                                      d d d        y # 1 sw Y   y xY w)N)r   r   r   r   )r   r   r   rI   updaterQ   rA   r   rN   setr   rH   r   rR   rS   rP   r   rg   r,   r   r-   r   keys)
r8   r   rA   r   r   r   ra   rU   rW   rX   s
             r:   update_segmentzSqlSysDB.update_segment  s    	'!"g!*o	
 :&
-.
 VJU:==N4??23F$GGHS&&tz7R(ST	 	
 WWY#!!T%:%:%<=KCC(%%'U:&U:00N4??SUCV4WWXVX	  &a)>)>)@AVC([]*99%%))(# YYs   D)G>>HzSqlSysDB.update_collectionc                    t        dt        |      i       t        d      }t        d      }| j                         j	                  |      j                  |j                  t        | j                  |            k(        }|t               k(  s%|j                  |j                  t        |            }|t               k(  s%|j                  |j                  t        |            }| j                         5 }t        || j                               \  }	}
|	r6|	dz   }	|j!                  |	|
      }|j#                         st%        d| d      |t               k7  r| j                         j'                  |      j                  |j(                  t        | j                  |            k(        j+                         }t        || j                               \  }	}
|j!                  |	|
       |Gt-        t.        |      }| j1                  |||j(                  ||t        |j3                                      d d d        y # 1 sw Y   y xY w)Nr   rf   r   re   r   r{   )r   r   r   rI   r   rQ   rA   r   rN   r,   r   rB   r   rH   r   rR   rS   r_   r   rP   r   rg   r   r-   r   r   )r8   rA   rB   r   r   r   r   ra   rU   rW   rX   ri   s               r:   update_collectionzSqlSysDB.update_collection  s    	'R	

 m,01
 VM"U=##~doob6I'JJK 	
 {}$m((.*>?AKM)m--~i/HIAWWY#!!T%:%:%<=KCO+S&1('+bT(DEE ;=(%%'U:&U"00N4??SUCV4WW VX  &a)>)>)@AVC('#NH=H))""00 HMMO,3 YYs   4D<H99IzSqlSysDB._metadata_from_rowsrs   .c                     t        dt        |      i       i }|D ]l  }t        |d         }|d   t        |d         ||<   (|d   t        |d         ||<   ?|d   t	        |d         ||<   V|d   \t        |d         ||<   n |xs dS )zGiven SQL rows, return a metadata map (assuming that the last four columns
        are the key, str_value, int_value & float_value)num_rowsN)r   r   r   r   floatbool)r8   rs   r   rb   r   s        r:   r   zSqlSysDB._metadata_from_rows  s     	'CI	

 =?Cc"g,C2w" #CGR$ #CGR$ %c"gR$ $SW  4r;   zSqlSysDB._insert_metadatatableid_col
clear_keysc                 x   t        dt        |      i       |r| j                         j                  |      j	                  |t        | j                  |            k(        j	                  |j                  j                  |D cg c]  }t        |       c}            j                         }t        || j                               \  }	}
|j                  |	|
       | j                         j                  |      j                  ||j                  |j                  |j                   |j"                  |j$                        }| j                  |      }|j'                         D ]  \  }}t)        |t*              r;|j-                  t        |      t        |      d d d t        t/        |                  }Rt)        |t0              r2|j-                  t        |      t        |      t        |      d d d       }t)        |t.              r2|j-                  t        |      t        |      d t        |      d d       }t)        |t2              r3|j-                  t        |      t        |      d d t        |      d       }| t        || j                               \  }	}
|	r|j                  |	|
       y y c c}w )Nnum_keys)r   r   rI   rP   rQ   r   rN   r   isinrg   r   rR   rS   rJ   rK   r   r   r   r   items
isinstancer   rM   r   r   r   )r8   rU   r   r   rA   r   r   kra   rW   rX   sql_idvs                r:   r   zSqlSysDB._insert_metadata  sZ    	'CM	

 !!#uv0C!DDEuyy~~*&M*Q~a'8*&MNO  "!T%:%:%<=KCKKV$ T%[W		!!   	
 $NN$DAq !T"HH"6*"1%"3q6* As#HH"6*"1%"1% As#HH"6*"1%"1% Au%HH"6*"1%"1% Q %T a!6!6!89VKKV$ } 'Ns   J7json_strc                    	 t        j                  |      }	 t	        j
                  |      S # t         j                  $ r t        d|       w xY w# t        $ r{}|j                  d      }|r`|j                  d      }|j                  d      }|r;|r8||kD  r2|j                         D 	ci c]  \  }}	|dvr||	 nc c}	}w }}}	|j                  d|i       t	        j                  |      }
t        d      }| j                         j                  |      j                  |j                  t        |
j!                                     j#                  |j$                  t        |      k(        }t'        || j)                               \  }}| j+                         5 }|j-                  ||       d d d        n# 1 sw Y   nxY w|
cY d }~S |d }~ww xY w)Nz1Unable to decode configuration from JSON string: hnsw_configuration
batch_sizesync_threshold)r   r   rf   )jsonloadsJSONDecodeErrorr   r   from_json_strr   getr   r   	from_jsonr   rI   r   r   r   r   rQ   rA   r   rR   rH   rS   )r8   r   r   config_jsonr   r   r   r   r   r   r   r   ra   rW   rX   rU   s                   r:   r   z/SqlSysDB._load_config_from_json_str_and_migratek  s   	**X.K&	2@@JJ ## 	CH:N 	 ) $	!,1E!F!/33LA
!3!7!78H!I.Z.5P %7$<$<$>*$>DAq$DD 1$>*& *
  &&(<>P'QR$C$M$M#%M %*-$8M))+.)99*=+D+D+FG }//>-3PPQ  #*!T-B-B-D"EKCcC0 # )(KI$	sR   - A "A
GAG1CCG!F=4	G=G	G
GGGc                 D   ddl m} t        d      }|j                  |xs i       }t	        j
                  |      }t        t        d|      g      }|j                         }| j                         j                  |      j                  |j                  t        |            j                  |j                  t        |      k(        }	t!        |	| j#                               \  }
}| j%                         5 }|j'                  |
|       ddd       |S # 1 sw Y   |S xY w)zuInsert the configuration from legacy metadata params into the collections table, and return the configuration object.r   )PersistentHnswParamsrf   r   )rB   r   )
parametersN)(chromadb.segment.impl.vector.hnsw_paramsr   r   extractr   from_legacy_paramsr   r   r   rI   r   r   r   r   rQ   rA   r   rR   rH   rS   )r8   r   r   r   r   hnsw_metadata_paramsr   r   configuration_json_strra   rW   rX   rU   s                r:   r   z*SqlSysDB._insert_config_from_legacy_params  s    	Rm,  4;;HNK6II 
 8&-5G
 "/!:!:!<VM"S--56 U=##~m'DDE 	
 a!6!6!89VWWY#KKV$  s   8DD)r<   N)NNNr3   );__name__
__module____qualname__r#   __annotations__r   r5   r"   r!   ALLr   r>   r   r   r   rZ   r%   rc   rj   r   r   r   rt   ry   r+   r|   r   r'   r   r   r   r   r(   r   r   r)   r   r*   r   r   r$   r   r   r   r   r,   r&   r-   r   r   r   r   r   r   r
   r   r   r   __classcell__)r9   s   @r:   r/   r/   /   sw    Iv I +-E-I-IJ9  K9 1?!+.	 8 4B  c x  6 7E %C % %$ % %8   $ $$	}  	
 
(	 < T# T$ T T %s %v % %"0& 07 0t 0f +-E-I-IJ6g 6$ 6  K6 .0H0L0LM (,#'#$(] ]  ]  7	] 
 7#]  8$]  C=]  ]  ]  ]  
z4	 ]   N] ~ )+C+G+GH ""(,EE TNE sm	E
 %E 
'	E  IEN ,.F.J.JK ""$(# $pTNp smp 	p
 p }p p 
*	p  Lpd 
!
	
 
 +-E-I-IJ? ?4 ?D ?  K?0	!& 	!d 	!t 	! .0H0L0LM %(	'-'- '- 	'-
 
'-  N'-R +-E-I-IJ
 @K}	.. . #8N#;<	.
 
.  K.` .0H0L0LM '2m5@]?J};; s#; $HSM2	;
 #8N#;<; 
;  N;z 02J2N2NO U38_- 	(	  P . -/G/K/KL *.U%U% U% 	U%
 U% !U% SX&U% 
U% MU%n0 0,/0	(0d& &,4X,>&	(&r;   r/   )?r   loggingrn   typingr   r   r   r   r   r   r	   r
   uuidr   	overridesr   pypikar   r   	itertoolsr   chromadb.api.configurationr   r   r   r   chromadb.configr   r   r   chromadb.db.baser   r   r   r   chromadb.db.systemr   chromadb.errorsr   r   r    chromadb.telemetry.opentelemetryr   r    r!   r"   chromadb.ingestr#   chromadb.typesr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   	getLoggerr  r   r/    r;   r:   <module>r     s      
 I I I       E D C C $ 
  %   
		8	$Tue Tr;   