
    Ng                    r   d dl m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 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"  G d de#ej
                  Z$ddZ% G d de&e
          Z'e$j(        Z)dZ*dZ+ G d de          Z, G d de          Z-dS )    )annotationsN)OrderedDict)Enum)partial)AnyCallableDictIterableListOptionalTupleType)Document)
Embeddings)VectorStore)BaseSettingsSettingsConfigDict)maximal_marginal_relevancec                      e Zd ZdZdZdZdZdS )DistanceStrategyz&Enumerator of the Distance strategies.l2cosineinnerN)__name__
__module____qualname____doc__	EUCLIDEANCOSINEMAX_INNER_PRODUCT     e/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/vectorstores/kinetica.pyr   r      s&        00IFr"   r   docs_and_scoresr   returnList[Document]c                    d | D             S )z!Return docs from docs and scores.c                    g | ]\  }}|S r!   r!   .0doc_s      r#   
<listcomp>z$_results_to_docs.<locals>.<listcomp>!   s    ...FCC...r"   r!   )r$   s    r#   _results_to_docsr.      s    ..o....r"   c                      e Zd ZdZdZdS )	Dimensionz-Some default dimensions for known embeddings.i   N)r   r   r   r   OPENAIr!   r"   r#   r0   r0   $   s        77FFFr"   r0   	langchainlangchain_kinetica_embeddingsc                      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<   e	Z
ded<   eZded<   ej        Zded<   ddZ edddd          ZdS )KineticaSettingsa:  `Kinetica` client configuration.

    Attribute:
        host (str) : An URL to connect to MyScale backend.
                             Defaults to 'localhost'.
        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'.
        metric (str) : Metric to compute distance,
                       supported are ('angular', 'euclidean', 'manhattan', 'hamming',
                       'dot'). Defaults to 'angular'.
                       https://github.com/spotify/annoy/blob/main/src/annoymodule.cc#L149-L169

    zhttp://127.0.0.1strhosti#  intportNzOptional[str]usernamepassworddatabasetablemetricitemr%   r   c                "    t          | |          S N)getattr)selfr?   s     r#   __getitem__zKineticaSettings.__getitem__O   s    tT"""r"   z.envzutf-8	kinetica_ignore)env_fileenv_file_encoding
env_prefixextra)r?   r6   r%   r   )r   r   r   r   r7   __annotations__r9   r:   r;   _LANGCHAIN_DEFAULT_SCHEMA_NAMEr<   "_LANGCHAIN_DEFAULT_COLLECTION_NAMEr=   DEFAULT_DISTANCE_STRATEGYvaluer>   rD   r   model_configr!   r"   r#   r5   r5   2   s          $ #D""""D"H"""""H""""2H22223E3333+1F1111# # # # &%!	  LLLr"   r5   c                  @   e Zd ZdZeeedddfdUdZdVdZdWdZ	e
dXd            ZeddeeddfeddYd'            ZdZd(Zd[d)Zd[d*Zd[d+Z	 	 d\d]d-Z	 	 d\d^d.Z	 	 d_d`d5Z	 	 d_dad7Z	 	 d_dbd9Z	 	 d_dcd:Zddd<Zded>Ze
dfd?            Z	 	 d_dgdBZ	 	 	 	 dhdidHZ	 	 	 	 dhdjdIZ	 	 	 	 dhdkdJZ	 	 	 	 dhdldKZ	 	 	 	 dhdldLZ ed e!            eeddfeddmdO            Z"ed e!            e#j$        eeddfeddndR            Z%e e!            deeddfeddodT            Z&dS )pKineticaa  `Kinetica` vector store.

    To use, you should have the ``gpudb`` python package installed.

    Args:
        config: Kinetica connection settings class.
        embedding_function: Any embedding function implementing
            `langchain.embeddings.base.Embeddings` interface.
        collection_name: The name of the collection to use. (default: langchain)
            NOTE: This is not the name of the table, but the name of the collection.
            The tables will be created when initializing the store (if not exists)
            So, make sure the user has the right permissions to create tables.
        distance_strategy: The distance strategy to use. (default: COSINE)
        pre_delete_collection: If True, will delete the collection if it exists.
            (default: False). Useful for testing.
        engine_args: SQLAlchemy's create engine arguments.

    Example:
        .. code-block:: python

            from langchain_community.vectorstores import Kinetica, KineticaSettings
            from langchain_community.embeddings.openai import OpenAIEmbeddings

            kinetica_settings = KineticaSettings(
                host="http://127.0.0.1", username="", password=""
                )
            COLLECTION_NAME = "kinetica_store"
            embeddings = OpenAIEmbeddings()
            vectorstore = Kinetica.from_documents(
                documents=docs,
                embedding=embeddings,
                collection_name=COLLECTION_NAME,
                config=kinetica_settings,
            )
    FNconfigr5   embedding_functionr   collection_namer6   schema_namedistance_strategyr   pre_delete_collectionboolloggerOptional[logging.Logger]relevance_score_fn"Optional[Callable[[float], float]]r%   Nonec	                    || _         || _        || _        || _        || _        || _        |pt          j        t                    | _	        || _
        |                     | j                   | _        dS )a<  Constructor for the Kinetica class

        Args:
            config (KineticaSettings): a `KineticaSettings` instance
            embedding_function (Embeddings): embedding function to use
            collection_name (str, optional): the Kinetica table name.
                            Defaults to _LANGCHAIN_DEFAULT_COLLECTION_NAME.
            schema_name (str, optional): the Kinetica table name.
                            Defaults to _LANGCHAIN_DEFAULT_SCHEMA_NAME.
            distance_strategy (DistanceStrategy, optional): _description_.
                            Defaults to DEFAULT_DISTANCE_STRATEGY.
            pre_delete_collection (bool, optional): _description_. Defaults to False.
            logger (Optional[logging.Logger], optional): _description_.
                            Defaults to None.
        N)_configrT   rU   rV   _distance_strategyrX   logging	getLoggerr   rZ   override_relevance_score_fn_Kinetica__get_db_db)	rC   rS   rT   rU   rV   rW   rX   rZ   r\   s	            r#   __init__zKinetica.__init__   sk    6 "4.&"3%:"; 1( ; ;+=(==..r"   
dimensionsr8   c                   	 ddl m} n# t          $ r t          d          w xY w|| _        d| d}| j        r|                                  | j        | _        | j        .t          | j                  dk    r| j         d| j         | _        dd	gd
d|gg dg dg| _
        |                                  |                                 | _        dS )z'
        Initialize the store.
        r   
GPUdbTableZCould not import Kinetica python API. Please install it with `pip install gpudb>=7.2.2.0`.zvector()N.textstring	embeddingbytes)metadatarp   json)idrp   uuid)gpudbrk   ImportErrorrh   rX   delete_schemarU   
table_namerV   lentable_schemacreate_schemacreate_tables_if_not_existsEmbeddingStore)rC   rh   rk   dimension_fields       r#   __post_init__zKinetica.__post_init__   s&   	((((((( 	 	 	G  	 %1J111% 	!   .'C0@,A,AA,E,E!%!1JJD4HJJDO X'?3***$$$	
 	*.*J*J*L*L   	 #r   c                    	 ddl m} n# t          $ r t          d          w xY w|                                }|j        |_        |j        |_        d|_         ||j        |          S )Nr   )GPUdbrl   T)r7   options)rw   r   rx   Optionsr:   r;   skip_ssl_cert_verificationr7   )rC   rS   r   r   s       r#   __get_dbzKinetica.__get_db   s    	####### 	 	 	G  	 --//!?!?-1*u&+w7777r   c                    | j         S rA   )rT   rC   s    r#   
embeddingszKinetica.embeddings   s    &&r"   )rV   texts	List[str]r   List[List[float]]rq   	metadatasOptional[List[dict]]idsOptional[List[str]]kwargsc                   |d |D             }|sd |D             } | d|||||	|
|d|}|                     |            |j        d||||d| |S )a  Class method to assist in constructing the `Kinetica` store instance
            using different combinations of parameters

        Args:
            config (KineticaSettings): a `KineticaSettings` instance
            texts (List[str]): The list of texts to generate embeddings for and store
            embeddings (List[List[float]]): List of embeddings
            embedding (Embeddings): the Embedding function
            dimensions (int): The number of dimensions the embeddings have
            metadatas (Optional[List[dict]], optional): List of JSON data associated
                        with each text. Defaults to None.
            ids (Optional[List[str]], optional): List of unique IDs (UUID by default)
                        associated with each text. Defaults to None.
            collection_name (str, optional): Kinetica table name.
                        Defaults to _LANGCHAIN_DEFAULT_COLLECTION_NAME.
            schema_name (str, optional): Kinetica schema name.
                        Defaults to _LANGCHAIN_DEFAULT_SCHEMA_NAME.
            distance_strategy (DistanceStrategy, optional): Not used for now.
                        Defaults to DEFAULT_DISTANCE_STRATEGY.
            pre_delete_collection (bool, optional): Whether to delete the Kinetica
                        schema or not. Defaults to False.
            logger (Optional[logging.Logger], optional): Logger to use for logging at
                        different levels. Defaults to None.

        Returns:
            Kinetica: An instance of Kinetica class
        Nc                N    g | ]"}t          t          j                              #S r!   r6   rv   uuid4r*   r,   s     r#   r-   z#Kinetica.__from.<locals>.<listcomp>  &    4443tz||$$444r"   c                    g | ]}i S r!   r!   r   s     r#   r-   z#Kinetica.__from.<locals>.<listcomp>      ++++++r"   )rS   rU   rV   rT   rW   rX   rZ   r   r   r   r   r!   )r   add_embeddings)clsrS   r   r   rq   rh   r   r   rU   rW   rX   rZ   rV   r   stores                  r#   __fromzKinetica.__from   s    Z ;44e444C 	,++U+++I 	
+#(/"7	
 	
 	
 	
 	J''' 	
J)	
 	
PV	
 	
 	
 r"   c                    	 ddl m} n# t          $ r t          d          w xY w || j        | j        | j        ddi          S )z2Create the table to store the texts and embeddingsr   rj   rl   is_replicatedtrue)_typenamedbr   )rw   rk   rx   r|   rz   rf   )rC   rk   s     r#   r~   z$Kinetica.create_tables_if_not_exists  s    	((((((( 	 	 	G  	
 z#x$f-	
 
 
 	
r   c                N    | j                             | j         ddi           dS )zDelete the tableno_error_if_not_existsr   )r   N)rf   clear_tablerz   r   s    r#   drop_tableszKinetica.drop_tables.  s;     +CV*L 	 	
 	
 	
 	
 	
r"   c                D    | j                             | j                   dS )zCreate a new Kinetica schemaN)rf   r}   rV   r   s    r#   r}   zKinetica.create_schema4  s!    t/00000r"   c                    | j                             d           | j                            | j        ddd           dS )z|Delete a Kinetica schema with cascade set to `true`
        This method will delete a schema with all tables in it.
        zTrying to delete collectionr   )r   cascadeN)rZ   debugrf   drop_schemarV   r   s    r#   ry   zKinetica.delete_schema8  sO     	7888FSS	
 	
 	
 	
 	
r"   Iterable[str]c                4   |d |D             }|sd |D             }g }t          ||||          D ]L\  }}}	}
t          j        d| j        z  g|R  }|                    ||t          j        |	          |
g           M| j                            |           |S )ai  Add embeddings to the vectorstore.

        Args:
            texts: Iterable of strings to add to the vectorstore.
            embeddings: List of list of embedding vectors.
            metadatas: List of metadatas associated with the texts.
            ids: List of ids for the text embedding pairs
            kwargs: vectorstore specific parameters
        Nc                N    g | ]"}t          t          j                              #S r!   r   r   s     r#   r-   z+Kinetica.add_embeddings.<locals>.<listcomp>S  r   r"   c                    g | ]}i S r!   r!   r   s     r#   r-   z+Kinetica.add_embeddings.<locals>.<listcomp>V  r   r"   %sf)	zipstructpackrh   appendrt   dumpsr   insert_records)rC   r   r   r   r   r   recordsro   rq   rs   ru   bufs               r#   r   zKinetica.add_embeddingsA  s    " ;44e444C 	,++U+++I-0
Is-S-S 	B 	B)D)Xr+edo5B	BBBCNND#tz(';';R@AAAA**7333
r"   c                    | j                             t          |                    }t          |d                   | _        t          | d          s|                     | j                    | j        d||||d|S )a  Run more texts through the embeddings and add to the vectorstore.

        Args:
            texts: Iterable of strings to add to the vectorstore.
            metadatas: Optional list of metadatas (JSON data) associated with the texts.
            ids: List of IDs (UUID) for the texts supplied; will be generated if None
            kwargs: vectorstore specific parameters

        Returns:
            List of ids from adding the texts into the vectorstore.
        r   r   r   r!   )rT   embed_documentslistr{   rh   hasattrr   r   )rC   r   r   r   r   r   s         r#   	add_textszKinetica.add_textsa  s    $ ,<<T%[[II
jm,,t-.. 	0t///"t" 
J)
 
PV
 
 	
r"      querykfilterOptional[dict]r&   c                h    | j                             |          }|                     |||          S )a^  Run similarity search with Kinetica with distance.

        Args:
            query (str): Query text to search for.
            k (int): Number of results to return. Defaults to 4.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

        Returns:
            List of Documents most similar to the query.
        )ro   rq   r   r   )rT   embed_querysimilarity_search_by_vector)rC   r   r   r   r   rq   s         r#   similarity_searchzKinetica.similarity_search{  sC    " +77U7CC	// 0 
 
 	
r"   List[Tuple[Document, float]]c                j    | j                             |          }|                     |||          }|S )ab  Return docs most similar to query.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

        Returns:
            List of Documents most similar to the query and score for each
        r   )rT   r   &similarity_search_with_score_by_vector)rC   r   r   r   rq   docss         r#   similarity_search_with_scorez%Kinetica.similarity_search_with_score  sB      +77>>	::1V ; 
 
 r"   List[float]c                T   |                      |||          }|rh|d         d         dk    rVd|v rR|d         }t          t          t          |                                                     }|                     |          S | j                            |d         d                    g S )Nstatus_infostatusOKr   message)_Kinetica__query_collectionr   r   values_results_to_docs_and_scoresrZ   error)rC   rq   r   r   respr   resultss          r#   r   z/Kinetica.similarity_search_with_score_by_vector  s     ,,Y6BB 	=D'1T99i4>O>O#'	?G3W^^%5%5 6 6788G33G<<<$}-i8999	r"   c                J    |                      |||          }d |D             S )ak  Return docs most similar to embedding vector.

        Args:
            embedding: Embedding to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

        Returns:
            List of Documents most similar to the query vector.
        r   c                    g | ]\  }}|S r!   r!   r)   s      r#   r-   z8Kinetica.similarity_search_by_vector.<locals>.<listcomp>  s    222Q222r"   )r   )rC   rq   r   r   r   r$   s         r#   r   z$Kinetica.similarity_search_by_vector  s<    " EE1V F 
 
 32/2222r"   r   c                N     t          |          dk    r fd|D             ng }|S )z$Return docs and scores from results.r   c           	         g | ]B}t          |d          t          j        |d                             j        |d         ndfCS )r      )page_contentrs   N   )r   rt   loadsrT   )r*   resultrC   s     r#   r-   z8Kinetica._results_to_docs_and_scores.<locals>.<listcomp>  sl     	 	 	  %+AY!%F1I!6!6   "&!8!DF1II$	 	 	r"   )r{   )rC   r   r   s   `  r#   r   z$Kinetica._results_to_docs_and_scores  sT     7||a	 	 	 	 &	 	 	 	  	 r"   Callable[[float], float]c                    | j         | j         S | j        t          j        k    r| j        S | j        t          j        k    r| j        S | j        t          j        k    r| j        S t          d| j         d          )a8  
        The 'correct' relevance function
        may differ depending on a few things, including:
        - the distance / similarity metric used by the VectorStore
        - the scale of your embeddings (OpenAI's are unit normed. Many others are not!)
        - embedding dimensionality
        - etc.
        Nz=No supported normalization function for distance_strategy of z?.Consider providing relevance_score_fn to Kinetica constructor.)
rd   ra   r   r   _cosine_relevance_score_fnr   _euclidean_relevance_score_fnr    %_max_inner_product_relevance_score_fn
ValueErrorr   s    r#   _select_relevance_score_fnz#Kinetica._select_relevance_score_fn  s     +733 "&6&===22$(8(BBB55$(8(JJJ==Q-1-DQ Q Q  r"   c           	        | j         t          j        k    rdS | j         t          j        k    rdS | j         t          j        k    rdS t          d| j          dd                    d t          D                        d          )	Nl2_distancecosine_distancedot_productz#Got unexpected value for distance: z. Should be one of z, c                    g | ]	}|j         
S r!   )rO   )r*   dss     r#   r-   z.Kinetica.distance_strategy.<locals>.<listcomp>
  s    .S.S.SBrx.S.S.Sr"   rn   )ra   r   r   r   r    r   joinr   s    r#   rW   zKinetica.distance_strategy  s    "&6&@@@ =$(8(???$$$(8(JJJ =Xd6M X X$(II.S.SBR.S.S.S$T$TX X X  r"   Optional[Dict[str, str]]r	   c                |   |t          j        |          nd}|d| dnd}dd                    d |D                       z   dz   }| j        }d	| d
| d| j         d| j         d| d| d}| j                            |           | j        	                    |          }	| j                            |	           |	S )zQuery the collection.Nz where 'z' = JSON(metadata)  [,c                ,    g | ]}t          |          S r!   )r6   )r*   xs     r#   r-   z/Kinetica.__query_collection.<locals>.<listcomp>-  s    'B'B'B1A'B'B'Br"   ]z(
                SELECT text, metadata, z(embedding, 'zA') 
                as distance, embedding
                FROM "z"."z"
                zH
                ORDER BY distance asc NULLS LAST
                LIMIT z	
        )
rt   r   r   rW   rV   rU   rZ   r   rf   execute_sql_and_decode)
rC   rq   r   r   json_filterwhere_clauseembedding_strdist_strategyquery_stringr   s
             r#   __query_collectionzKinetica.__query_collection  s$   2 -3,>dj(((D & 8{7777 	 chh'B'B	'B'B'BCCCcI.(5 DQ  '  -1,@  	     	,'''x..|<<$r"            ?fetch_klambda_multfloatc                                          |||          }|d         }t          t          t          |                                                     }	 fd|d         D             }
t	          t          j        |t
          j                  |
||                               |	          }fdt          |          D             S )a  Return docs selected using the maximal marginal relevance with score
            to embedding vector.

        Maximal marginal relevance optimizes for similarity to query AND diversity
            among selected documents.

        Args:
            embedding: Embedding to look up documents similar to.
            k (int): Number of Documents to return. Defaults to 4.
            fetch_k (int): Number of Documents to fetch to pass to MMR algorithm.
                Defaults to 20.
            lambda_mult (float): Number between 0 and 1 that determines the degree
                of diversity among the results with 0 corresponding
                to maximum diversity and 1 to minimum diversity.
                Defaults to 0.5.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

        Returns:
            List[Tuple[Document, float]]: List of Documents selected by maximal marginal
                relevance to the query and score for each.
        r   r   c                J    g | ]}t          j        d j        z  |           S )r   )r   unpackrh   )r*   rq   rC   s     r#   r-   zOKinetica.max_marginal_relevance_search_with_score_by_vector.<locals>.<listcomp>a  s<     
 
 
 M%$/19==
 
 
r"   rq   )dtype)r   r  c                "    g | ]\  }}|v 	|S r!   r!   )r*   irmmr_selecteds      r#   r-   zOKinetica.max_marginal_relevance_search_with_score_by_vector.<locals>.<listcomp>o  s'    IIIdaqL7H7H7H7H7Hr"   )
r   r   r   r   r   nparrayfloat32r   	enumerate)rC   rq   r   r  r  r   r   r   r   r   embedding_list
candidatesr  s   `           @r#   2max_marginal_relevance_search_with_score_by_vectorz;Kinetica.max_marginal_relevance_search_with_score_by_vector?  s    < &&gf&UU#IsD!1!122344
 
 
 
$[1
 
 

 2HYbj111#	
 
 
 55g>>
IIIIi
33IIIIr"   c                \    | j                             |          } | j        |f||||d|S )av  Return docs selected using the maximal marginal relevance.

        Maximal marginal relevance optimizes for similarity to query AND diversity
            among selected documents.

        Args:
            query (str): Text to look up documents similar to.
            k (int): Number of Documents to return. Defaults to 4.
            fetch_k (int): Number of Documents to fetch to pass to MMR algorithm.
                Defaults to 20.
            lambda_mult (float): Number between 0 and 1 that determines the degree
                of diversity among the results with 0 corresponding
                to maximum diversity and 1 to minimum diversity.
                Defaults to 0.5.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

        Returns:
            List[Document]: List of Documents selected by maximal marginal relevance.
        r   r  r  r   )rT   r   'max_marginal_relevance_search_by_vector)rC   r   r   r  r  r   r   rq   s           r#   max_marginal_relevance_searchz&Kinetica.max_marginal_relevance_searchq  sT    8 +77>>	;t;
#
 
 
 
 	
r"   c           	     `    | j                             |          } | j        d|||||d|}|S )a  Return docs selected using the maximal marginal relevance with score.

        Maximal marginal relevance optimizes for similarity to query AND diversity
            among selected documents.

        Args:
            query (str): Text to look up documents similar to.
            k (int): Number of Documents to return. Defaults to 4.
            fetch_k (int): Number of Documents to fetch to pass to MMR algorithm.
                Defaults to 20.
            lambda_mult (float): Number between 0 and 1 that determines the degree
                of diversity among the results with 0 corresponding
                to maximum diversity and 1 to minimum diversity.
                Defaults to 0.5.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

        Returns:
            List[Tuple[Document, float]]: List of Documents selected by maximal marginal
                relevance to the query and score for each.
        )rq   r   r  r  r   r!   )rT   r   r  )	rC   r   r   r  r  r   r   rq   r   s	            r#   (max_marginal_relevance_search_with_scorez1Kinetica.max_marginal_relevance_search_with_score  sX    : +77>>	FtF 
#
 
 
 
 r"   c                F     | j         |f||||d|}t          |          S )a  Return docs selected using the maximal marginal relevance
            to embedding vector.

        Maximal marginal relevance optimizes for similarity to query AND diversity
            among selected documents.

        Args:
            embedding (str): Text to look up documents similar to.
            k (int): Number of Documents to return. Defaults to 4.
            fetch_k (int): Number of Documents to fetch to pass to MMR algorithm.
                Defaults to 20.
            lambda_mult (float): Number between 0 and 1 that determines the degree
                of diversity among the results with 0 corresponding
                to maximum diversity and 1 to minimum diversity.
                Defaults to 0.5.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

        Returns:
            List[Document]: List of Documents selected by maximal marginal relevance.
        r  )r  r.   )rC   rq   r   r  r  r   r   r$   s           r#   r  z0Kinetica.max_marginal_relevance_search_by_vector  sL    : R$Q
#
 
 
 
  000r"   c                   K   t          | j        |f||||d|}t          j                                        d|           d{V S )z:Return docs selected using the maximal marginal relevance.r  N)r   r  asyncioget_event_looprun_in_executor)rC   rq   r   r  r  r   r   funcs           r#   (amax_marginal_relevance_search_by_vectorz1Kinetica.amax_marginal_relevance_search_by_vector  su       8
 #
 
 
 
 +--==dDIIIIIIIIIr"   r   Type[Kinetica]c	                  t          |          dk    rt          d          	 |                    |dd                   }n,# t          $ r |                    |d                   g}Y nw xY wt          |d                   }|                    t          |                    } | j        d|||||||||	||d|
}|S )a  Adds the texts passed in to the vector store and returns it

        Args:
            cls (Type[Kinetica]): Kinetica class
            texts (List[str]): A list of texts for which the embeddings are generated
            embedding (Embeddings): List of embeddings
            metadatas (Optional[List[dict]], optional): List of dicts, JSON
                        describing the texts/documents. Defaults to None.
            config (KineticaSettings): a `KineticaSettings` instance
            collection_name (str, optional): Kinetica schema name.
                        Defaults to _LANGCHAIN_DEFAULT_COLLECTION_NAME.
            schema_name (str, optional): Kinetica schema name.
                        Defaults to _LANGCHAIN_DEFAULT_SCHEMA_NAME.
            distance_strategy (DistanceStrategy, optional): Distance strategy
                        e.g., l2, cosine etc.. Defaults to DEFAULT_DISTANCE_STRATEGY.
            ids (Optional[List[str]], optional): A list of UUIDs for each
                        text/document. Defaults to None.
            pre_delete_collection (bool, optional): Indicates whether the Kinetica
                        schema is to be deleted or not. Defaults to False.

        Returns:
            Kinetica: a `Kinetica` instance
        r   ztexts is emptyr   r   r   rq   rh   rS   r   r   rU   rV   rW   rX   r!   )r{   r   r   NotImplementedErrorr   r   _Kinetica__from)r   r   rq   r   rS   rU   rW   r   rX   rV   r   first_embeddingrh   r   kinetica_stores                  r#   
from_textszKinetica.from_texts   s    N u::??-...	@'77ac
CCOO" 	@ 	@ 	@(44U1X>>?OOO	@ +,,
..tE{{;;
# 
!!+#/"7
 
 
 
 s   A &A+*A+text_embeddingsList[Tuple[str, List[float]]]c
                   d |D             }d |D             }t          |d                   } | j        d|||||||||
||	d|S )a  Adds the embeddings passed in to the vector store and returns it

        Args:
            cls (Type[Kinetica]): Kinetica class
            text_embeddings (List[Tuple[str, List[float]]]): A list of texts
                            and the embeddings
            embedding (Embeddings): List of embeddings
            metadatas (Optional[List[dict]], optional): List of dicts, JSON describing
                        the texts/documents. Defaults to None.
            config (KineticaSettings): a `KineticaSettings` instance
            dimensions (int, optional): Dimension for the vector data, if not passed a
                        default will be used. Defaults to Dimension.OPENAI.
            collection_name (str, optional): Kinetica schema name.
                        Defaults to _LANGCHAIN_DEFAULT_COLLECTION_NAME.
            schema_name (str, optional): Kinetica schema name.
                        Defaults to _LANGCHAIN_DEFAULT_SCHEMA_NAME.
            distance_strategy (DistanceStrategy, optional): Distance strategy
                        e.g., l2, cosine etc.. Defaults to DEFAULT_DISTANCE_STRATEGY.
            ids (Optional[List[str]], optional): A list of UUIDs for each text/document.
                        Defaults to None.
            pre_delete_collection (bool, optional): Indicates whether the
                        Kinetica schema is to be deleted or not. Defaults to False.

        Returns:
            Kinetica: a `Kinetica` instance
        c                    g | ]
}|d          S )r   r!   r*   ts     r#   r-   z,Kinetica.from_embeddings.<locals>.<listcomp>n  s    ///!1///r"   c                    g | ]
}|d          S )r   r!   r0  s     r#   r-   z,Kinetica.from_embeddings.<locals>.<listcomp>o  s    444qad444r"   r   r&  r!   )r{   r(  )r   r,  rq   r   rS   rh   rU   rW   r   rX   rV   r   r   r   s                 r#   from_embeddingszKinetica.from_embeddingsC  s    V 0////44O444
A''
sz 
!!+#/"7
 
 
 
 	
r"   	documentsc	               `    d |D             }d |D             } | j         d||||||	|||d	|
S )a
  Adds the list of `Document` passed in to the vector store and returns it

        Args:
            cls (Type[Kinetica]): Kinetica class
            texts (List[str]): A list of texts for which the embeddings are generated
            embedding (Embeddings): List of embeddings
            config (KineticaSettings): a `KineticaSettings` instance
            metadatas (Optional[List[dict]], optional): List of dicts, JSON describing
                        the texts/documents. Defaults to None.
            collection_name (str, optional): Kinetica schema name.
                        Defaults to _LANGCHAIN_DEFAULT_COLLECTION_NAME.
            schema_name (str, optional): Kinetica schema name.
                        Defaults to _LANGCHAIN_DEFAULT_SCHEMA_NAME.
            distance_strategy (DistanceStrategy, optional): Distance strategy
                        e.g., l2, cosine etc.. Defaults to DEFAULT_DISTANCE_STRATEGY.
            ids (Optional[List[str]], optional): A list of UUIDs for each text/document.
                        Defaults to None.
            pre_delete_collection (bool, optional): Indicates whether the Kinetica
                        schema is to be deleted or not. Defaults to False.

        Returns:
            Kinetica: a `Kinetica` instance
        c                    g | ]	}|j         
S r!   )r   r*   ds     r#   r-   z+Kinetica.from_documents.<locals>.<listcomp>  s    333A333r"   c                    g | ]	}|j         
S r!   )rs   r7  s     r#   r-   z+Kinetica.from_documents.<locals>.<listcomp>  s    333AQZ333r"   )	r   rq   r   rS   rU   rV   rW   r   rX   r!   )r+  )r   r4  rq   rS   r   rU   rW   r   rX   rV   r   r   s               r#   from_documentszKinetica.from_documents  sp    N 4333333333	s~ 
+#/"7
 
 
 
 	
r"   )rS   r5   rT   r   rU   r6   rV   r6   rW   r   rX   rY   rZ   r[   r\   r]   r%   r^   )rh   r8   r%   r^   )rS   r5   r%   r   )r%   r   )rS   r5   r   r   r   r   rq   r   rh   r8   r   r   r   r   rU   r6   rW   r   rX   rY   rZ   r[   rV   r6   r   r   r%   rR   )r%   r   )r%   r^   )NN)r   r   r   r   r   r   r   r   r   r   r%   r   )
r   r   r   r   r   r   r   r   r%   r   )r   N)
r   r6   r   r8   r   r   r   r   r%   r&   )r   r6   r   r8   r   r   r%   r   )rq   r   r   r8   r   r   r%   r   )
rq   r   r   r8   r   r   r   r   r%   r&   )r   r   r%   r   )r%   r   )r%   r6   )rq   r   r   r8   r   r   r%   r	   )r   r  r  N)rq   r   r   r8   r  r8   r  r  r   r   r   r   r%   r   )r   r6   r   r8   r  r8   r  r  r   r   r   r   r%   r&   )r   r6   r   r8   r  r8   r  r  r   r   r   r   r%   r   )rq   r   r   r8   r  r8   r  r  r   r   r   r   r%   r&   )r   r$  r   r   rq   r   r   r   rS   r5   rU   r6   rW   r   r   r   rX   rY   rV   r6   r   r   r%   rR   )r   r$  r,  r-  rq   r   r   r   rS   r5   rh   r8   rU   r6   rW   r   r   r   rX   rY   rV   r6   r   r   r%   rR   )r   r$  r4  r&   rq   r   rS   r5   r   r   rU   r6   rW   r   r   r   rX   rY   rV   r6   r   r   r%   rR   )'r   r   r   r   rM   rL   rN   rg   r   re   propertyr   classmethodr(  r~   r   r}   ry   r   r   r   r   r   r   r   r   rW   r   r  r  r  r  r#  r5   r+  r0   r1   r3  r:  r!   r"   r#   rR   rR   Z   s?       " "P  B9.G&++/AE#/ #/ #/ #/ #/JM M M M@8 8 8 8 ' ' ' X'  +/#'A.G&++/C :C C C C C [CJ
 
 
 
"
 
 
 
1 1 1 1
 
 
 
 +/#'    F +/#'	
 
 
 
 
: !%	
 
 
 
 
6 !%	    2 !%	    , !%	3 3 3 3 3,   $   6    X  +/	0 0 0 0 0j  +/0J 0J 0J 0J 0Jj  +/$
 $
 $
 $
 $
R  !%& & & & &V  +/&1 &1 &1 &1 &1V  +/J J J J J2 
 +/#3#3#5#5A.G#'&+@ :@ @ @ @ @ [@D 
 +/#3#3#5#5#*A.G#'&+;
 :;
 ;
 ;
 ;
 ;
 [;
z 
 $4#3#5#5*.A.G#'&+4
 :4
 4
 4
 4
 4
 [4
 4
 4
r"   rR   )r$   r   r%   r&   ).
__future__r   r  enumrt   rb   r   rv   collectionsr   r   	functoolsr   typingr   r   r	   r
   r   r   r   r   numpyr  langchain_core.documentsr   langchain_core.embeddingsr   langchain_core.vectorstoresr   pydantic_settingsr   r   &langchain_community.vectorstores.utilsr   r6   r   r.   r8   r0   r   rN   rL   rM   r5   rR   r!   r"   r#   <module>rH     s   " " " " " "       # # # # # #             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         sDI      / / / /
    T    -6 !, # #
% % % % %| % % %P\
 \
 \
 \
 \
{ \
 \
 \
 \
 \
r"   