
    ?h&                     r   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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 d dlZd dlZd dlmZ d dlmZ d dlmZ  e ej:                         dz        Z e ej:                         d	z        Zd
Z dZ!dZ"e G d d             Z#de$fdZ% G d d      Z&y)    N)	dataclass)Path)DictOptional)
exceptions)WeaviateStartUpError)_decode_json_response_dictz.cache/weaviate-embedded/z.local/share/weaviatez7https://github.com/weaviate/weaviate/releases/download/i  i  c                       e Zd ZU ej                  j                  de      Zee	d<   ej                  j                  de
      Zee	d<   dZee	d<   eZee	d<   dZee	d	<   d
Zeeeef      e	d<   eZee	d<   y
)EmbeddedOptionsXDG_DATA_HOMEpersistence_data_pathXDG_CACHE_HOMEbinary_pathz1.23.0versionportz	127.0.0.1hostnameNadditional_env_vars	grpc_port)__name__
__module____qualname__osenvirongetDEFAULT_PERSISTENCE_DATA_PATHr   str__annotations__DEFAULT_BINARY_PATHr   r   DEFAULT_PORTr   intr   r   r   r   DEFAULT_GRPC_PORTr        O/home/chris/cleankitchens-env/lib/python3.12/site-packages/weaviate/embedded.pyr   r       sx    !#A^!_3_zz~~&68KLKLGSD#Hc48$sCx.18&Is&r#   r   returnc                      t        j                          } | j                  d       t        | j                         d         }| j	                          |S )N) r      )socketbindr    getsocknameclose)sockport_nums     r$   get_random_portr/   +   s?    ==?DIIg4##%a()HJJLOr#   c                       e Zd ZdeddfdZdeddfdZddZddZdd	Z	de
fd
ZddZedd       ZddZddZddZy)
EmbeddedDBoptionsr%   Nc                 F   t               | _        || _        |j                  | _        d | _        | j                          | j                          d| _        t        j                  d      }t        j                  | j                  j                        }t        |t        j                        r+t        j                  | j                  j                  d      }|r| j                  j                  j                  d      sN| j                  j                  j                  d      s)t!        j"                  | j                  j                        | j                  j                  j%                  t&              r=| j                  j                  t)        t&              d  j+                  d      d   | _        | j                  j                  | _        y |j/                  | j                  j                        r2d	| j                  j                  z   }|| _        | j1                  |       y | j                  j                  d
k(  r:t3        j4                  d      }t7        |d      }|J | j1                  |d          y t!        j"                  | j                  j                        )Nr'   zF^\d\.\d{1,2}\.\d{1,2}?(-rc\.\d{1,2}|-beta\.\d{1,2}|-alpha\.\d{1,2}|$)$T)simple_host.tar.gz.zip/r   vlatestz>https://api.github.com/repos/weaviate/weaviate/releases/latestz"get tag of latest weaviate releasetag_name)r/   data_bind_portr2   r   processensure_paths_existcheck_supported_platform_parsed_weaviate_versionrecompile
validatorsurlr   
isinstanceValidationErrorendswithr   WeaviateEmbeddedInvalidVersion
startswithGITHUB_RELEASE_DOWNLOAD_URLlensplit_download_urlmatch"_set_download_url_from_version_tagrequestsr   r	   )selfr2   version_pattern	valid_urlversion_tagresponser9   s          r$   __init__zEmbeddedDB.__init__4   s   -/%//:>!%%'(*% **U
 NN4<<#7#78	i!;!;<"t||';';NI<<''00;DLLDXDXDaDaE !??@T@TUU ||##../JK040D0D3461%*Q1 - "&!5!5D""4<<#7#78 4 44K,7D)33K@\\!!X-||PH 0:^_F%%%33F:4FG;;DLL<P<PQQr#   r   c                     t        j                         dk(  rd}d}n%t        j                         }|dk(  rd}n|dk(  rd}d}t        |z   d	z   |z   d
z   t        j                         z   d
z   |z   dz   |z   | _        y )NDarwinallzipx86_64amd64aarch64arm64ztar.gzz
/weaviate--.)platformsystemmachinerI   rL   )rP   r   machine_typepackage_formats       r$   rN   z-EmbeddedDB._set_download_url_from_version_taga   s    ??( L"N#++-Lx'&*&%N (  	
 oo     	 	r#   c                 $    | j                          y )N)stoprP   s    r$   __del__zEmbeddedDB.__del__z   s    		r#   c                     t        | j                  j                        j                  dd       t        | j                  j                        j                  dd       y )NT)parentsexist_ok)r   r2   r   mkdirr   rg   s    r$   r=   zEmbeddedDB.ensure_paths_exist}   sF    T\\%%&,,TD,IT\\//066td6Sr#   c                    t        | j                  j                  d| j                  z   dz   t	        t        j                  | j                  j                  j                  d            j                               z         | _
        | j                  j                         s*t        d| j                  j                   d| j                          | j                  j                  d      rt        | j                  j                  d      }t        j                   j#                  | j                  |       t%        j&                  |      }|j)                  dt        | j                  j                        	       |j+                          n| j                  j                  d
      sJ t        | j                  j                  d      }t        j                   j#                  | j                  |       t-        j.                  |d      5 }|j)                  dt        | j                  j                        	       d d d        t        | j                  j                        dz  j1                  | j                         | j                  j3                  | j                  j5                         j6                  t4        j8                  z         y y # 1 sw Y   xY w)Nz	weaviate-r^   zutf-8zBinary z( did not exist. Downloading binary from r5   ztmp_weaviate.tgzweaviate)pathr6   ztmp_weaviate.zipr)r   r2   r   r?   r   hashlibsha256r   encode	hexdigest_weaviate_binary_pathexistsprintrL   rF   urllibrequesturlretrievetarfileopenextractunlinkzipfileZipFilerenamechmodstatst_modeS_IEXEC)rP   tar_filename
binary_tarzip_filenamezip_refs        r$   ensure_weaviate_binary_existsz(EmbeddedDB.ensure_weaviate_binary_exists   s(   %)LL$$++, '..!5!5!<!<W!EFPPRST&
" ))002$,,2233[\`\n\n[op !!**95#DLL$<$<>PQ**4+=+=|L$\\,7
"":D9Q9Q4R"S##%))226:::#DLL$<$<>PQ**4+=+=|L__\37 U7OOJT$,,:R:R5SOTU $,,**+j8@@A[A[\ &&,,**//199DLLH) 3U Us   1KKc                 ^   t        j                   t         j                  t         j                        }	 |j                  | j                  j
                  | j                  j                  f       |j                          y# t         j                  t        f$ r |j                          Y yw xY w)NTF)
r)   AF_INETSOCK_STREAMconnectr2   r   r   r,   errorConnectionRefusedError)rP   ss     r$   is_listeningzEmbeddedDB.is_listening   sw    MM&..&*<*<=	IIt||,,dll.?.?@AGGI45 	GGI	s   AB   )B,+B,c                    d}d}t        ||z        }| j                         du r7|dkD  r2t        j                  |       |dz  }| j                         du r|dkD  r2|dk(  r&t	        d| j
                  j                   d| d      y )	N   g?Fr   r(   z,Embedded DB did not start listening on port z within z seconds)r    r   timesleepr   r2   r   )rP   secondssleep_intervalretriess       r$   wait_till_listeningzEmbeddedDB.wait_till_listening   s    g./!U*w{JJ~&qLG !U*w{ a<&>t||?P?P>QQYZaYbbjk  r#   c                  p    t        j                         dv r t        t        j                          d      y )N)Windowsz is not supported with EmbeddedDB. Please upvote this feature request if you want
                 this: https://github.com/weaviate/weaviate/issues/3315)r`   ra   r   r"   r#   r$   r>   z#EmbeddedDB.check_supported_platform   s<    ??+&__&' (H K  ,r#   c           
         | j                         r#t        d| j                  j                          y | j	                          t
        j                  j                         }|j                  dd       |j                  dd       |j                  d| j                  j                         |j                  dt        t                            |j                  dt        | j                               |j                  d	d
       |j                  dd| j                  j                          | j                  j                  %|j                  | j                  j                         t        j                          5  t        j"                  dt$               t'        j(                  | j*                   d| j                  j,                  dt        | j                  j                        ddg|      }|| _        d d d        t        d| j                  j0                   d| j.                  j2                          | j5                          y # 1 sw Y   SxY w)Nz/embedded weaviate is already listening on port 'AUTHENTICATION_ANONYMOUS_ACCESS_ENABLEDtrueQUERY_DEFAULTS_LIMIT20PERSISTENCE_DATA_PATHCLUSTER_GOSSIP_BIND_PORT	GRPC_PORTENABLE_MODULESzrtext2vec-openai,text2vec-cohere,text2vec-huggingface,ref2vec-centroid,generative-openai,qna-openai,reranker-cohereCLUSTER_HOSTNAMEEmbedded_at_ignorez--hostz--portz--schemehttp)envzStarted z: process ID )r   rw   r2   r   r   r   r   copy
setdefaultr   r   r/   r   r   updatewarningscatch_warningssimplefilterResourceWarning
subprocessPopenru   r   r<   r   pidr   )rP   my_envr<   s      r$   startzEmbeddedDB.start   s   CDLLDUDUCVWX**,"CVL0$714<<3U3UV4c/:K6LM+s4>>':;	
 	,T\\=N=N<O.PQ<<++7MM$,,::; $$& 	#!!(O< &&112LL))))* G #DL	# 	112-@P@P?QRS  "!	# 	#s   >A<IIc                     | j                   6	 | j                   j                          | j                   j                          y y # t        $ r& t	        d| j                   j
                   d       Y y w xY w)Nz(Tried to stop embedded weaviate process zB. Process was not found. So not doing
                    anything)r<   	terminatewaitProcessLookupErrorrw   r   rg   s    r$   rf   zEmbeddedDB.stop   sl    <<#&&(!!# $ & @AQAQ@R S  s   4A ,A32A3c                     | j                         s4t        d| j                  j                   d       | j	                          y y )Nz+Embedded weaviate wasn't listening on port z%, so starting embedded weaviate again)r   rw   r2   r   r   rg   s    r$   ensure_runningzEmbeddedDB.ensure_running   s>      "=dll>O>O=PPuv JJL	 #r#   )r%   N)r   r   r   r   rU   r   rN   rh   r=   r   boolr   r   staticmethodr>   r   rf   r   r"   r#   r$   r1   r1   3   sr    +R +RD +RZ
# 
$ 
2T@d 
  -#^	r#   r1   )'rq   r   r`   r@   r)   r   r   r{   r   urllib.requestrx   r   r   dataclassesr   pathlibr   typingr   r   rO   rB   rn   r   weaviate.exceptionsr   weaviate.utilr	   r   homer   r   rI   r   r!   r   r    r/   r1   r"   r#   r$   <module>r      s     	  	         !  !    4 4)$))+(CCD  #IDIIK2I$I J W   ' ' ' K Kr#   