§
    šŠtjÚN  ã                  ó|  — d dl 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	m
Z
mZmZmZmZmZmZ d dlZd dl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  ej         ¦   «         Z!dZ"d%d„Z#d&d„Z$d'd„Z%ee&ee&e'e(e)f         f         Z* G d„ de¦  «        Z+ G d„ de¦  «        Z, G d„ de¦  «        Z-d(d"„Z.d)d$„Z/dS )*é    )ÚannotationsN)Úsha1)ÚThread)ÚAnyÚDictÚIterableÚListÚMappingÚOptionalÚTupleÚUnion©ÚDocument)Ú
Embeddings)ÚVectorStore)ÚBaseSettingsÚSettingsConfigDict)Ú	TypedDict)Úmaximal_marginal_relevanceFÚsÚstrÚargsr   ÚreturnÚboolc                ó   — |D ]	}|| vr dS Œ
dS )zô
    Check if a string has multiple substrings.
    Args:
        s: The string to check
        *args: The substrings to check for in the string

    Returns:
        bool: True if all substrings are present in the string, False otherwise
    FT© )r   r   Úas      úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/vectorstores/starrocks.pyÚhas_mul_sub_strr      s-   € ð ð ð ˆØ�Aˆ:ˆ:Ø�5�5ð àˆ4ó    ÚNonec                ó6   — t           rt          | ¦  «         dS dS )z[
    Print a debug message if DEBUG is True.
    Args:
        s: The message to print
    N)ÚDEBUGÚprint)r   s    r   Údebug_outputr%   &   s%   € õ ð Ýˆa‰Œˆˆˆðð r    Ú
connectionÚqueryúList[dict[str, Any]]c                ó\  — |                       ¦   «         }|                     |¦  «         |j        }g }|                     ¦   «         D ]A}i }t	          |¦  «        D ]\  }}||         d         }	|||	<   Œ|                     |¦  «         ŒBt          |¦  «         |                     ¦   «          |S )zÏ
    Get a named result from a query.
    Args:
        connection: The connection to the database
        query: The query to execute

    Returns:
        List[dict[str, Any]]: The result of the query
    r   )ÚcursorÚexecuteÚdescriptionÚfetchallÚ	enumerateÚappendr%   Úclose)
r&   r'   r*   ÚcolumnsÚresultÚvalueÚrÚidxÚdatumÚks
             r   Úget_named_resultr8   0   sº   € ð ×ÒÑ Ô €FØ
‡N‚N�5ÑÔÐØÔ €GØ€FØ—’Ñ"Ô"ð ð ˆØˆÝ# EÑ*Ô*ð 	ð 	‰JˆC�Ø˜”˜Q”ˆAØˆAˆa‰DˆDØ�Š�aÑÔÐÐÝ�ÑÔÐØ
‡L‚L�N„N€NØ€Mr    c                  óB   — e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   dS )ÚQueryResultzList[List[str]]Úidsz	List[Any]Ú
embeddingsúList[Document]Ú	documentszOptional[List[Metadata]]Ú	metadataszOptional[List[float]]Ú	distancesN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   r    r   r:   r:   L   sN   € € € € € € ØÐÐÑØÐÐÑØÐÐÑØ'Ð'Ð'Ñ'Ø$Ð$Ð$Ñ$Ð$Ð$r    r:   c                  ó¦   — e Zd ZU dZdZded<   dZded<   dZded	<   d
Zded<   dddddœZ	ded<   dZ
ded<   dZded<   d!d„Z edddd¬¦  «        Zd S )"ÚStarRocksSettingsaÕ  StarRocks client configuration.

    Attribute:
        StarRocks_host (str) : An URL to connect to MyScale backend.
                             Defaults to 'localhost'.
        StarRocks_port (int) : URL port to connect with HTTP. Defaults to 8443.
        username (str) : Username to login. Defaults to None.
        password (str) : Password to login. Defaults to None.
        database (str) : Database name to find the table. Defaults to 'default'.
        table (str) : Table name to operate on.
                      Defaults to 'vector_table'.

        column_map (Dict) : Column type map to project column name onto langchain
                            semantics. Must have keys: `text`, `id`, `vector`,
                            must be same size to number of columns. For example:
                            .. code-block:: python

                                {
                                    'id': 'text_id',
                                    'embedding': 'text_embedding',
                                    'document': 'text_plain',
                                    'metadata': 'metadata_dictionary_in_json',
                                }

                            Defaults to identity map.
    Ú	localhostr   ÚhostiF#  ÚintÚportÚrootÚusernameÚ ÚpasswordÚidÚdocumentÚ	embeddingÚmetadata)rO   rP   rQ   rR   zDict[str, str]Ú
column_mapÚdefaultÚdatabaseÚ	langchainÚtableÚitemr   r   c                ó"   — t          | |¦  «        S ©N)Úgetattr)ÚselfrX   s     r   Ú__getitem__zStarRocksSettings.__getitem__   s   € Ý�t˜TÑ"Ô"Ð"r    z.envúutf-8Ú
starrocks_Úignore)Úenv_fileÚenv_file_encodingÚ
env_prefixÚextraN)rX   r   r   r   )rA   rB   rC   Ú__doc__rH   rD   rJ   rL   rN   rS   rU   rW   r]   r   Úmodel_configr   r    r   rF   rF   T   së   € € € € € € ðð ð6 €DÐÐÐÑØ€DÐÐÐÑØ€HÐÐÐÑØ€HÐÐÐÑð ØØ Øð	"ð "€Jð ð ð ñ ð €HÐÐÐÑØ€EÐÐÐÑð#ð #ð #ð #ð &Ð%ØØ!ØØð	ñ ô €L€L€Lr    rF   c                  ó  ‡ — e Zd ZdZ	 dAdBˆ fd„ZdCd„ZedDd„¦   «         ZdEd„ZdFd„Z		 	 	 dGdHd„Z
e	 	 	 	 dIdJd"„¦   «         ZdKd#„Z	 dAdLd)„Z	 dMdNd.„Z	 	 dMdOd/„Z	 dMdPd1„ZdQd2„ZedKd3„¦   «         Z	 	 	 dRdSd;„Z	 	 	 	 	 dTdUd@„Zˆ xZS )VÚ	StarRocksa  `StarRocks` vector store.

    You need a `pymysql` python package, and a valid account
    to connect to StarRocks.

    Right now StarRocks has only implemented `cosine_similarity` function to
    compute distance between two vectors. And there is no vector inside right now,
    so we have to iterate all vectors and compute spatial distance.

    For more information, please visit
        [StarRocks official site](https://www.starrocks.io/)
        [StarRocks github](https://github.com/StarRocks/starrocks)
    NrQ   r   ÚconfigúOptional[StarRocksSettings]Úkwargsr   r   r!   c                óP  •— 	 ddl }n# t          $ r t          d¦  «        ‚w xY w	 ddlm} || _        n# t          $ r d„ | _        Y nw xY wt	          ¦   «                              ¦   «          |�|| _        nt          ¦   «         | _        | j        sJ ‚| j        j        r| j        j	        sJ ‚| j        j
        r| j        j        r| j        j        sJ ‚dD ]}|| j        j
        v sJ ‚Œt          |                     d¦  «        ¦  «        }d| j        j        › d	| j        j        › d
| j        j
        d         › d| j        j
        d         › d| j        j
        d         › d| j        j
        d         › d�| _        || _        d| _        d| _        || _        d| _        t+          | j        ¦  «          |j        d| j        j        | j        j	        | j        j        | j        j        | j        j        dœ|¤Ž| _        t+          | j        ¦  «         t5          | j        | j        ¦  «         dS )z—StarRocks Wrapper to LangChain

        embedding_function (Embeddings):
        config (StarRocksSettings): Configuration to StarRocks Client
        r   NzVCould not import pymysql python package. Please install it with `pip install pymysql`.)Útqdmc                ó   — | S rZ   r   )Úxrk   s     r   ú<lambda>z$StarRocks.__init__.<locals>.<lambda>±   s   € ¨Q€ r    )rO   rQ   rP   rR   ÚtestzCREATE TABLE IF NOT EXISTS ú.z(
    rO   z string,
    rP   rQ   z array<float>,
    rR   zf string
) ENGINE = OLAP PRIMARY KEY(id) DISTRIBUTED BY HASH(id)   PROPERTIES ("replication_num" = "1")ú\)rs   ú'ÚDESC)rH   rJ   ÚuserrN   rU   r   )ÚpymysqlÚImportErrorrm   ÚpgbarÚsuperÚ__init__ri   rF   rH   rJ   rS   rU   rW   ÚlenÚembed_queryÚschemaÚdimÚBSÚmust_escapeÚembedding_functionÚ
dist_orderr%   ÚconnectrL   rN   r&   r8   )	r\   rQ   ri   rk   rw   rm   r7   r   Ú	__class__s	           €r   r{   zStarRocks.__init__™   sŸ  ø€ ð	ØˆNˆNˆNˆNøÝð 	ð 	ð 	Ýð@ñô ð ð	øøøð
	/Ø!Ð!Ð!Ð!Ð!Ð!àˆDŒJˆJøÝð 	/ð 	/ð 	/à.Ð.ˆDŒJˆJˆJð	/øøøõ 	‰Œ×ÒÑÔÐØÐØ ˆDŒKˆKå+Ñ-Ô-ˆDŒKØŒ{ÐÐˆ{ØŒ{ÔÐ4 D¤KÔ$4Ð4Ð4Ð4ØŒ{Ô%ÐT¨$¬+Ô*>ÐTÀ4Ä;ÔCTÐTÐTÐTØ<ð 	/ð 	/ˆAØ˜œÔ.Ð.Ð.Ð.Ð.Ð.õ �)×'Ò'¨Ñ/Ô/Ñ0Ô0ˆðØ œKÔ0ðð Ø37´;Ô3Dðð à	„[Ô˜DÔ!ðð ð 
„[Ô˜JÔ'ðð ð 
„[Ô˜KÔ(ð	ð ð
 
„[Ô˜JÔ'ðð ð ˆŒð ˆŒØˆŒØ&ˆÔØ"+ˆÔØ ˆŒÝ�T”[Ñ!Ô!Ð!ð *˜'œ/ð 
Ø”Ô!Ø”Ô!Ø”Ô%Ø”[Ô)Ø”[Ô)ð
ð 
ð ð
ð 
ˆŒõ 	�T”[Ñ!Ô!Ð!Ý˜œ¨$¬+Ñ6Ô6Ð6Ð6Ð6s   ƒ ˆ"¦4 ´A	ÁA	r3   r   c                óF   ‡ — d                      ˆ fd„|D ¦   «         ¦  «        S )NrM   c              3  óD   •K  — | ]}|‰j         v r‰j        › |› �n|V — Œd S rZ   )r�   r€   )Ú.0Úcr\   s     €r   ú	<genexpr>z'StarRocks.escape_str.<locals>.<genexpr>Þ   s>   øè è € ÐVÐVÈ1¨!¨tÔ/?Ð*?Ð*?˜$œ'� 1���ÀQÐVÐVÐVÐVÐVÐVr    )Újoin)r\   r3   s   ` r   Ú
escape_strzStarRocks.escape_strÝ   s+   ø€ Ø�wŠwÐVÐVÐVÐVÐPUÐVÑVÔVÑVÔVÐVr    c                ó   — | j         S rZ   )r‚   ©r\   s    r   r<   zStarRocks.embeddingsà   s   € àÔ&Ð&r    Útransacr   Úcolumn_namesúIterable[str]c           
     ó¢  ‡ ‡— d                      |¦  «        }t          |¦  «                             ‰ j        j        d         ¦  «        Šg }|D ]J}d                      ˆˆ fd„t          |¦  «        D ¦   «         ¦  «        }|                     d|› d�¦  «         ŒKd‰ j        j        › d‰ j        j        › d|› dd                      |¦  «        › d	�	}|S )
Nú,rQ   c                ó’   •— g | ]C\  }}|‰k    r&d ‰                      t          |¦  «        ¦  «        › d �ndt          |¦  «        › �‘ŒDS )rt   zarray<float>)rŒ   r   )rˆ   r5   Ú_nÚembed_tuple_indexr\   s      €€r   ú
<listcomp>z/StarRocks._build_insert_sql.<locals>.<listcomp>ì   sn   ø€ ð ð ð ñ "˜˜bð Ð"3Ò3Ð3ð 8˜DŸOšO­C°©G¬GÑ4Ô4Ð7Ð7Ð7Ð7à5­C°©G¬GÐ5Ð5ð	ð ð r    ú(ú)z1
                INSERT INTO
                    rr   z))
                VALUES
                z
                )	r‹   ÚtupleÚindexri   rS   r.   r/   rU   rW   )r\   r�   r�   ÚksÚ_dataÚnÚi_strr–   s   `      @r   Ú_build_insert_sqlzStarRocks._build_insert_sqlä   s  øø€ Ø�XŠX�lÑ#Ô#ˆÝ! ,Ñ/Ô/×5Ò5ØŒKÔ" ;Ô/ñ
ô 
Ðð ˆØð 	#ð 	#ˆAØ—’ðð ð ð ð õ &/¨q¡\¤\ðñ ô ñ	ô 	ˆAð �LŠL˜˜Q˜˜˜Ñ"Ô"Ð"Ð"ðà”[Ô)ðð à,0¬KÔ,=ðð à@Bðð ð —’˜%‘”ð	ð ð ˆð ˆr    c                óz   — |                       ||¦  «        }t          |¦  «         t          | j        |¦  «         d S rZ   )r    r%   r8   r&   )r\   r�   r�   Ú_insert_querys       r   Ú_insertzStarRocks._insertþ   s=   € Ø×.Ò.¨w¸ÑEÔEˆÝ�]Ñ#Ô#Ð#Ý˜œ¨-Ñ8Ô8Ð8Ð8Ð8r    é    Útextsr?   úOptional[List[dict]]Ú
batch_sizerI   r;   úOptional[Iterable[str]]ú	List[str]c           
     óº  — |pd„ |D ¦   «         }| j         j        }g }|d         ||d         ||d         | j                             t	          |¦  «        ¦  «        i}|pd„ |D ¦   «         }t          t          j        |¦  «        ||d         <   t          t          |¦  «        t          |¦  «        z
  ¦  «        dk    sJ ‚t          |                     ¦   «         Ž \  }	}
	 d}|                      t          |
Ž d	t          |¦  «        ¬
¦  «        D ]±}t          ||	                     | j         j        d         ¦  «                 ¦  «        | j        k    sJ ‚|                     |¦  «         t          |¦  «        |k    rD|r|                     ¦   «          t#          | j        ||	g¬¦  «        }|                     ¦   «          g }Œ²t          |¦  «        dk    r,|r|                     ¦   «          |                      ||	¦  «         d„ |D ¦   «         S # t(          $ rG}t*                               dt/          |¦  «        › dt1          |¦  «        › d�¦  «         g cY d}~S d}~ww xY w)a¢  Insert more texts through the embeddings and add to the VectorStore.

        Args:
            texts: Iterable of strings to add to the VectorStore.
            ids: Optional list of ids to associate with the texts.
            batch_size: Batch size of insertion
            metadata: Optional column data to be inserted

        Returns:
            List of ids from adding the texts into the VectorStore.

        c                óv   — g | ]6}t          |                     d ¦  «        ¦  «                             ¦   «         ‘Œ7S )r^   )r   ÚencodeÚ	hexdigest)rˆ   Úts     r   r—   z'StarRocks.add_texts.<locals>.<listcomp>  s8   € ÐIÐIÐI¸a•d˜1Ÿ8š8 GÑ,Ô,Ñ-Ô-×7Ò7Ñ9Ô9ÐIÐIÐIr    rO   rP   rQ   c                ó   — g | ]}i ‘ŒS r   r   )rˆ   Ú_s     r   r—   z'StarRocks.add_texts.<locals>.<listcomp>   s   € Ð!4Ð!4Ð!4¨ "Ð!4Ð!4Ð!4r    rR   r   NzInserting data...)ÚdescÚtotal)Útargetr   c                ó   — g | ]}|‘ŒS r   r   )rˆ   Úis     r   r—   z'StarRocks.add_texts.<locals>.<listcomp>7  s   € Ð#Ð#Ð#˜!�AÐ#Ð#Ð#r    ú	[91m[1mú
[0m [95mú[0m)ri   rS   r‚   Úembed_documentsÚlistÚmapÚjsonÚdumpsr|   ÚsetÚzipÚitemsry   r›   r   r/   r‹   r   r£   ÚstartÚ	ExceptionÚloggerÚerrorÚtyper   )r\   r¥   r?   r§   r;   rk   Úcolmap_r�   r�   ÚkeysÚvaluesr®   ÚvÚes                 r   Ú	add_textszStarRocks.add_texts  sj  € ð* ÐIÐIÐIÀ5ÐIÑIÔIˆØ”+Ô(ˆØˆà�DŒM˜3Ø�JÔ Ø�KÔ  $Ô"9×"IÒ"IÍ$ÈuÉ+Ì+Ñ"VÔ"Vð
ˆð
 Ð4Ð!4Ð!4¨eÐ!4Ñ!4Ô!4ˆ	Ý,/µ´
¸IÑ,FÔ,Fˆ�W˜ZÔ(Ñ)Ý•3�w‘<”<¥# lÑ"3Ô"3Ñ3Ñ4Ô4¸Ò9Ð9Ð9Ð9Ý˜L×.Ò.Ñ0Ô0Ð1‰ˆˆfð	ØˆAØ—Z’ZÝ�V�Ð#6½cÀ)¹n¼nð  ñ ô ð !ð !�õ ˜˜$Ÿ*š* T¤[Ô%;¸KÔ%HÑIÔIÔJÑKÔKÈtÌxÒWÐWÐWÐWà—’˜qÑ!Ô!Ð!Ý�w‘<”< :Ò-Ð-Øð !ØŸš™œ˜Ý d¤l¸'À4¸ÐIÑIÔI�AØ—G’G‘I”I�IØ �GøÝ�7‰|Œ|˜aÒÐØð Ø—F’F‘H”H�HØ—’˜W dÑ+Ô+Ð+Ø#Ð#˜sÐ#Ñ#Ô#Ð#øÝð 	ð 	ð 	Ý�LŠLÐS­4°©7¬7ÐSÐSÅCÈÁFÄFÐSÐSÐSÑTÔTÐTØˆIˆIˆIˆIˆIˆIøøøøð	øøøs   ÃD*H	 È	
IÈ<IÉIÉIúOptional[List[Dict[Any, Any]]]Útext_idsc                óL   —  | ||fi |¤Ž}|                      ||||¬¦  «         |S )aÃ  Create StarRocks wrapper with existing texts

        Args:
            embedding_function (Embeddings): Function to extract text embedding
            texts (Iterable[str]): List or tuple of strings to be added
            config (StarRocksSettings, Optional): StarRocks configuration
            text_ids (Optional[Iterable], optional): IDs for the texts.
                                                     Defaults to None.
            batch_size (int, optional): Batchsize when transmitting data to StarRocks.
                                        Defaults to 32.
            metadata (List[dict], optional): metadata to texts. Defaults to None.
        Returns:
            StarRocks Index
        )r;   r§   r?   )rË   )	Úclsr¥   rQ   r?   ri   rÍ   r§   rk   Úctxs	            r   Ú
from_textszStarRocks.from_texts<  s<   € ð2 ˆc�)˜VÐ.Ð. vÐ.Ð.ˆØ�Š�e °jÈIˆÑVÔVÐVØˆ
r    c                óH  — d| j         j        › d| j         j        › d�}|| j         j        › d| j         j        › d�z  }|d| j         j        › d�z  }d}d	}|d
||z  dz   z  dz   z  }g d¢}|d|d         d›d|d         d›�z  }|d|d         d›d�z  }|d
||z  dz   z  dz   z  }d| j         j        › d| j         j        › �}t          |¦  «         t          | j        |¦  «        }|D ]+}|d|d         d›d|d         d›�z  }|d|d         d›d�z  }Œ,|d
||z  dz   z  dz   z  }|S )zâText representation for StarRocks Vector Store, prints backends, username
            and schemas. Easy to use with `str(StarRocks())`

        Returns:
            repr: string to show connection info and data schema
        z	[92m[1mrr   z @ ú:z[0m

z[1musername: z[0m

Table Schema:
é   é   ú-é   ú
)ÚnamerÅ   Úkeyz|[94mr   Ú24sz
[0m|[96mé   z[0m|
zDESC ÚFieldÚTypeÚKey)	ri   rU   rW   rH   rJ   rL   r%   r8   r&   )r\   Ú_reprÚwidthÚfieldsr1   Úq_strÚrsr4   s           r   Ú__repr__zStarRocks.__repr__Y  sµ  € ð P $¤+Ô"6ÐOÐO¸¼Ô9JÐOÐOÐOˆØ�D”KÔ$ÐDÐD t¤{Ô'7ÐDÐDÐDÑDˆØÐU T¤[Ô%9ÐUÐUÐUÑUˆØˆØˆØ�˜ ™¨Ñ*Ñ+¨dÑ2Ñ2ˆØ)Ð)Ð)ˆØÐM˜W QœZÐMÐMÐM¸WÀQ¼ZÐMÐMÐMÑMˆØÐ> G¨A¤JÐ>Ð>Ð>Ð>Ñ>ˆØ�˜ ™¨Ñ*Ñ+¨dÑ2Ñ2ˆØB˜œÔ,ÐBÐB¨t¬{Ô/@ÐBÐBˆÝ�UÑÔÐÝ˜dœo¨uÑ5Ô5ˆØð 	Að 	AˆAØÐP  7¤ÐPÐPÐPÀÀ6ÄÐPÐPÐPÑPˆEØÐ@¨¨%¬Ð@Ð@Ð@Ð@Ñ@ˆEˆEØ�˜ ™¨Ñ*Ñ+¨dÑ2Ñ2ˆØˆr    Úq_embúList[float]ÚtopkÚ	where_strúOptional[str]c                ó|  — d                      t          t          |¦  «        ¦  «        }|rd|› �}nd}d| j        j        d         › d| j        j        d         › d|› d	| j        j        d
         › d| j        j        d
         › d| j        j        › d| j        j        › d|› d| j        › d|› d�}t          |¦  «         |S )Nr“   zWHERE rM   z>
            SELECT
                id as id,
                rP   z as document,
                rR   zB as metadata,
                cosine_similarity_norm(array<float>[z],
                rQ   z) as dist,
                z as embedding
            FROM rr   z
            z
            ORDER BY dist z
            LIMIT )	r‹   r»   r   ri   rS   rU   rW   rƒ   r%   )r\   ræ   rè   ré   Ú	q_emb_strrã   s         r   Ú_build_query_sqlzStarRocks._build_query_sqls  s$  € ð —H’H�S¥ e™_œ_Ñ-Ô-ˆ	Øð 	Ø, Ð,Ð,ˆIˆIàˆIðð ”Ô'¨
Ô3ðð ð ”Ô'¨
Ô3ð	ð ð
 6?ðð ð ”Ô'¨Ô4ðð ð ”Ô'¨Ô4ðð ð ”+Ô&ðð ð *.¬Ô):ðð ð ðð ð  œ?ðð ð ðð ð ˆõ 	�UÑÔÐØˆr    é   r'   r7   r=   c                óR   —  | j         | j                             |¦  «        ||fi |¤ŽS )a«  Perform a similarity search with StarRocks

        Args:
            query (str): query string
            k (int, optional): Top K neighbors to retrieve. Defaults to 4.
            where_str (Optional[str], optional): where condition string.
                                                 Defaults to None.

            NOTE: Please do not let end-user to fill this and always be aware
                  of SQL injection. When dealing with metadatas, remember to
                  use `{self.metadata_column}.attribute` instead of `attribute`
                  alone. The default name for it is `metadata`.

        Returns:
            List[Document]: List of Documents
        )Úsimilarity_search_by_vectorr‚   r}   )r\   r'   r7   ré   rk   s        r   Úsimilarity_searchzStarRocks.similarity_search�  s@   € ð& 0ˆtÔ/ØÔ#×/Ò/°Ñ6Ô6¸¸9ð
ð 
ØHNð
ð 
ð 	
r    c           	     ó"  ‡ — ‰                       |||¦  «        }	 t          ‰ j        |¦  «        }ˆ fd„|D ¦   «         S # t          $ rG}t                               dt          |¦  «        › dt          |¦  «        › d�¦  «         g cY d}~S d}~ww xY w)aÃ  Perform a similarity search with StarRocks by vectors

        Args:
            query (str): query string
            k (int, optional): Top K neighbors to retrieve. Defaults to 4.
            where_str (Optional[str], optional): where condition string.
                                                 Defaults to None.

            NOTE: Please do not let end-user to fill this and always be aware
                  of SQL injection. When dealing with metadatas, remember to
                  use `{self.metadata_column}.attribute` instead of `attribute`
                  alone. The default name for it is `metadata`.

        Returns:
            List[Document]: List of (Document, similarity)
        c           
     ó®   •— g | ]Q}t          |‰j        j        d                   t          j        |‰j        j        d                  ¦  «        ¬¦  «        ‘ŒRS )rP   rR   ©Úpage_contentrR   ©r   ri   rS   r¼   Úloads©rˆ   r4   r\   s     €r   r—   z9StarRocks.similarity_search_by_vector.<locals>.<listcomp>¾  sh   ø€ ð ð ð ð
 õ	 Ø!" 4¤;Ô#9¸*Ô#EÔ!FÝ!œZ¨¨$¬+Ô*@ÀÔ*LÔ(MÑNÔNðñ ô ðð ð r    r¶   r·   r¸   N)rí   r8   r&   rÂ   rÃ   rÄ   rÅ   r   )r\   rQ   r7   ré   rk   rã   Úq_rrÊ   s   `       r   rð   z%StarRocks.similarity_search_by_vector¤  sÁ   ø€ ð. ×%Ò% i°°IÑ>Ô>ˆð	Ý" 4¤?°EÑ:Ô:ˆCðð ð ð ð
 ðñ ô ð øõ ð 	ð 	ð 	Ý�LŠLÐS­4°©7¬7ÐSÐSÅCÈÁFÄFÐSÐSÐSÑTÔTÐTØˆIˆIˆIˆIˆIˆIøøøøð	øøøs   š"= ½
BÁ<B	ÂBÂ	BúList[Tuple[Document, float]]c           	     óN  ‡ — ‰                       ‰ j                             |¦  «        ||¦  «        }	 ˆ fd„t          ‰ j        |¦  «        D ¦   «         S # t
          $ rG}t                               dt          |¦  «        › dt          |¦  «        › d�¦  «         g cY d}~S d}~ww xY w)a«  Perform a similarity search with StarRocks

        Args:
            query (str): query string
            k (int, optional): Top K neighbors to retrieve. Defaults to 4.
            where_str (Optional[str], optional): where condition string.
                                                 Defaults to None.

            NOTE: Please do not let end-user to fill this and always be aware
                  of SQL injection. When dealing with metadatas, remember to
                  use `{self.metadata_column}.attribute` instead of `attribute`
                  alone. The default name for it is `metadata`.

        Returns:
            List[Document]: List of documents
        c           
     ó¾   •— g | ]Y}t          |‰j        j        d                   t          j        |‰j        j        d                  ¦  «        ¬¦  «        |d         f‘ŒZS )rP   rR   rô   Údiströ   rø   s     €r   r—   zEStarRocks.similarity_search_with_relevance_scores.<locals>.<listcomp>à  sv   ø€ ð 	ð 	ð 	ð õ Ø%& t¤{Ô'=¸jÔ'IÔ%JÝ!%¤¨A¨d¬kÔ.DÀZÔ.PÔ,QÑ!RÔ!Rðñ ô ð �f”Iðð	ð 	ð 	r    r¶   r·   r¸   N)
rí   r‚   r}   r8   r&   rÂ   rÃ   rÄ   rÅ   r   )r\   r'   r7   ré   rk   rã   rÊ   s   `      r   Ú'similarity_search_with_relevance_scoresz1StarRocks.similarity_search_with_relevance_scoresÉ  sÒ   ø€ ð& ×%Ò%ØÔ#×/Ò/°Ñ6Ô6¸¸9ñ
ô 
ˆð	ð	ð 	ð 	ð 	õ *¨$¬/¸5ÑAÔAð	ñ 	ô 	ð 	øõ ð 	ð 	ð 	Ý�LŠLÐS­4°©7¬7ÐSÐSÅCÈÁFÄFÐSÐSÐSÑTÔTÐTØˆIˆIˆIˆIˆIˆIøøøøð	øøøs   ² A Á
B$Á<BÂB$ÂB$c                ód   — t          | j        d| j        j        › d| j        j        › �¦  «         dS )z,
        Helper function: Drop data
        zDROP TABLE IF EXISTS rr   N)r8   r&   ri   rU   rW   rŽ   s    r   ÚdropzStarRocks.dropî  sB   € õ 	ØŒOØN D¤KÔ$8ÐNÐN¸4¼;Ô;LÐNÐNñ	
ô 	
ð 	
ð 	
ð 	
r    c                ó&   — | j         j        d         S )NrR   ©ri   rS   rŽ   s    r   Úmetadata_columnzStarRocks.metadata_column÷  s   € àŒ{Ô% jÔ1Ð1r    é   ç      à?úlist[float]Úfetch_kÚlambda_multÚfloatúlist[Document]c                ó¼  ‡ ‡— ‰                       ||d ¦  «        }t          ‰ j        |¦  «        }t          d„ |D ¦   «         ˆ fd„|D ¦   «         ˆ fd„|D ¦   «         ˆ fd„|D ¦   «         d„ |D ¦   «         ¬¦  «        }t	          t          j        |t
          j        ¬¦  «        |d         ||¬	¦  «        Št          |¦  «        }	ˆfd
„t          |	¦  «        D ¦   «         }
|
S )Nc                ó   — g | ]
}|d          ‘ŒS )rO   r   ©rˆ   r4   s     r   r—   zEStarRocks.max_marginal_relevance_search_by_vector.<locals>.<listcomp>  s   € Ð&Ð&Ð&˜Q��4”Ð&Ð&Ð&r    c                ód   •— g | ],}t          j        |‰j        j        d                   ¦  «        ‘Œ-S )rQ   ©r¼   r÷   ri   rS   rø   s     €r   r—   zEStarRocks.max_marginal_relevance_search_by_vector.<locals>.<listcomp>  s?   ø€ ð ð ð ØGH•”
˜1˜Tœ[Ô3°KÔ@ÔAÑBÔBðð ð r    c                ó@   •— g | ]}|‰j         j        d                   ‘ŒS )rP   r  rø   s     €r   r—   zEStarRocks.max_marginal_relevance_search_by_vector.<locals>.<listcomp>
  s(   ø€ ÐJÐJÐJÀ�q˜œÔ/°
Ô;Ô<ÐJÐJÐJr    c                ód   •— g | ],}t          j        |‰j        j        d                   ¦  «        ‘Œ-S )rR   r  rø   s     €r   r—   zEStarRocks.max_marginal_relevance_search_by_vector.<locals>.<listcomp>  s2   ø€ ÐVÐVÐVÈQ•t”z ! D¤KÔ$:¸:Ô$FÔ"GÑHÔHÐVÐVÐVr    c                ó   — g | ]
}|d          ‘ŒS )rý   r   r  s     r   r—   zEStarRocks.max_marginal_relevance_search_by_vector.<locals>.<listcomp>  s   € Ð.Ð.Ð. Q�q˜”yÐ.Ð.Ð.r    )r;   r<   r>   r?   r@   )Údtyper<   )r7   r  c                ó"   •— g | ]\  }}|‰v ¯	|‘ŒS r   r   )rˆ   rµ   r4   Úmmr_selecteds      €r   r—   zEStarRocks.max_marginal_relevance_search_by_vector.<locals>.<listcomp>  s'   ø€ ÐUÐUÐU¡$ ! QÀ1ÈÐCTÐCT˜AÐCTÐCTÐCTr    )
rí   r8   r&   r:   r   ÚnpÚarrayÚfloat32Ú_results_to_docsr.   )r\   rQ   r7   r  r  rk   rã   rù   ÚresultsÚ
candidatesÚselected_resultsr  s   `          @r   Ú'max_marginal_relevance_search_by_vectorz1StarRocks.max_marginal_relevance_search_by_vectorû  s+  øø€ ð ×%Ò% i°¸$Ñ?Ô?ˆÝ˜tœ°Ñ6Ô6ˆÝØ&Ð& #Ð&Ñ&Ô&ðð ð ð ØLOðñ ô ð KÐJÐJÐJÀcÐJÑJÔJØVÐVÐVÐVÐRUÐVÑVÔVØ.Ð.¨#Ð.Ñ.Ô.ð
ñ 
ô 
ˆõ 2ÝŒH�Y¥b¤jÐ1Ñ1Ô1Ø�LÔ!ØØ#ð	
ñ 
ô 
ˆõ & gÑ.Ô.ˆ
àUÐUÐUÐU­)°JÑ*?Ô*?ÐUÑUÔUÐØÐr    é   ÚfilterúOptional[Dict[str, str]]Úwhere_documentc                ó˜   — | j         €t          d¦  «        ‚| j                              |¦  «        }|                      ||||||¬¦  «        S )NzBFor MMR search, you must specify an embedding function oncreation.)r  r  r!  )r<   Ú
ValueErrorr}   r  )	r\   r'   r7   r  r  r  r!  rk   rQ   s	            r   Úmax_marginal_relevance_searchz'StarRocks.max_marginal_relevance_search  sg   € ð Œ?Ð"ÝØTñô ð ð ”O×/Ò/°Ñ6Ô6ˆ	Ø×;Ò;ØØØØ#ØØ)ð <ñ 
ô 
ð 	
r    rZ   )rQ   r   ri   rj   rk   r   r   r!   )r3   r   r   r   )r   r   )r�   r   r�   r‘   r   r   )r�   r   r�   r‘   r   r!   )Nr¤   N)r¥   r‘   r?   r¦   r§   rI   r;   r¨   rk   r   r   r©   )NNNr¤   )r¥   r©   rQ   r   r?   rÌ   ri   rj   rÍ   r¨   r§   rI   rk   r   r   rh   )r   r   )ræ   rç   rè   rI   ré   rê   r   r   )rî   N)
r'   r   r7   rI   ré   rê   rk   r   r   r=   )
rQ   rç   r7   rI   ré   rê   rk   r   r   r=   )
r'   r   r7   rI   ré   rê   rk   r   r   rú   )r   r!   )rî   r  r  )rQ   r  r7   rI   r  rI   r  r	  rk   r   r   r
  )r  r  r  NN)r'   r   r7   rI   r  rI   r  r	  r  r   r!  r   rk   r   r   r=   )rA   rB   rC   re   r{   rŒ   Úpropertyr<   r    r£   rË   ÚclassmethodrÑ   rå   rí   rñ   rð   rþ   r   r  r  r$  Ú__classcell__)r…   s   @r   rh   rh   Š   s+  ø€ € € € € ðð ð" /3ðB7ð B7ð B7ð B7ð B7ð B7ð B7ðHWð Wð Wð Wð ð'ð 'ð 'ñ „Xð'ðð ð ð ð49ð 9ð 9ð 9ð +/ØØ'+ð7ð 7ð 7ð 7ð 7ðr ð
 59Ø.2Ø,0Øðð ð ð ñ „[ðð8ð ð ð ð6 IMðð ð ð ð ð6 BFð
ð 
ð 
ð 
ð 
ð4 Ø#'ð	#ð #ð #ð #ð #ðL BFð#ð #ð #ð #ð #ðJ
ð 
ð 
ð 
ð ð2ð 2ð 2ñ „Xð2ð ØØ ð ð  ð  ð  ð  ðF ØØ Ø+/Ø37ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r    rh   r  r=   c                ó4   — d„ t          | ¦  «        D ¦   «         S )Nc                ó   — g | ]\  }}|‘ŒS r   r   )rˆ   Údocr°   s      r   r—   z$_results_to_docs.<locals>.<listcomp>6  s   € ÐCÐCÐC‘F�C˜ˆCÐCÐCÐCr    )Ú_results_to_docs_and_scores©r  s    r   r  r  5  s   € ØCÐCÕ9¸'ÑBÔBÐCÑCÔCÐCr    rú   c                ó\   — d„ t          | d         | d         | d         ¦  «        D ¦   «         S )Nc                ó\   — g | ])}t          |d          |d         pi ¬¦  «        |d         f‘Œ*S )r   r×   rô   rÜ   r   )rˆ   r2   s     r   r—   z/_results_to_docs_and_scores.<locals>.<listcomp>:  sJ   € ð ð ð àõ 
˜v aœy°6¸!´9°?ÀÐ	CÑ	CÔ	CÀVÈAÄYÐOðð ð r    r>   r?   r@   )r¿   r,  s    r   r+  r+  9  sE   € ðð åØ�KÔ Ø�KÔ Ø�KÔ ñ
ô 
ðñ ô ð 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ú   )0Ú
__future__r   r¼   ÚloggingÚhashlibr   Ú	threadingr   Útypingr   r   r   r	   r
   r   r   r   Únumpyr  Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.vectorstoresr   Úpydantic_settingsr   r   Útyping_extensionsr   Ú&langchain_community.vectorstores.utilsr   Ú	getLoggerrÃ   r#   r   r%   r8   r   rI   r	  r   ÚMetadatar:   rF   rh   r  r+  r   r    r   ú<module>r=     s5  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ Mà Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'à MÐ MÐ MÐ MÐ MÐ Mà	ˆÔ	Ñ	Ô	€Ø€ðð ð ð ð ð ð ð ðð ð ð ð2 �3˜˜c 3¨¨tÐ3Ô4Ð4Ô5€ð%ð %ð %ð %ð %�)ñ %ô %ð %ð3ð 3ð 3ð 3ð 3˜ñ 3ô 3ð 3ðlh
ð h
ð h
ð h
ð h
�ñ h
ô h
ð h
ðVDð Dð Dð Dðð ð ð ð ð r    