
    ?h5                          d Z ddlZddlmZmZmZmZ ddlmZ	 ddl
mZ ddlmZ ddlmZmZ erdd	lmZ  G d
 d      Zy)z!
ConfigBuilder class definition.
    N)DictAnycastTYPE_CHECKING)ConnectionError)
Connection)UnexpectedStatusCodeException)_capitalize_first_letter_decode_json_response_dict   )Classificationc                       e Zd ZdZdeddfdZdedd fdZd	edd fd
Z	dedd fdZ
dedd fdZdedd fdZdedd fdZdedd fdZdedd fdZddZdedd fdZddZdefdZdefdZy)ConfigBuilderzO
    ConfigBuild class that is used to configure a classification process.
    
connectionclassificationr   c                 <    || _         || _        i | _        d| _        y)a  
        Initialize a ConfigBuilder class instance.

        Parameters
        ----------
        connection : weaviate.connect.Connection
            Connection object to an active and running weaviate instance.
        classification : weaviate.classification.Classification
            Classification object to be configured using this ConfigBuilder
            instance.
        FN)_connection_classification_config_wait_for_completion)selfr   r   s      d/home/chris/cleankitchens-env/lib/python3.12/site-packages/weaviate/classification/config_builder.py__init__zConfigBuilder.__init__   s#     &-')$)!    classification_typereturnc                 $    || j                   d<   | S )z
        Set classification type.

        Parameters
        ----------
        classification_type : str
            Type of the desired classification.

        Returns
        -------
        ConfigBuilder
            Updated ConfigBuilder.
        typer   )r   r   s     r   	with_typezConfigBuilder.with_type(   s      3Vr   kc                 l    d| j                   vrd|i| j                   d<   | S || j                   d   d<   | S )a  
        Set k number for the kNN.

        Parameters
        ----------
        k : int
            Number of objects to use to make a classification guess.
            (For kNN)

        Returns
        -------
        ConfigBuilder
            Updated ConfigBuilder.
        settingsr!   r   )r   r!   s     r   with_kzConfigBuilder.with_k:   sC      T\\)(+QxDLL$  -.DLL$S)r   
class_namec                 6    t        |      | j                  d<   | S )z
        What Object type to classify.

        Parameters
        ----------
        class_name : str
            Name of the class to be classified.

        Returns
        -------
        ConfigBuilder
            Updated ConfigBuilder.
        class)r
   r   )r   r%   s     r   with_class_namezConfigBuilder.with_class_nameP   s     !9 DWr   classify_propertiesc                 $    || j                   d<   | S )z
        Set the classify properties.

        Parameters
        ----------
        classify_properties: list
            A list of properties to classify.

        Returns
        -------
        ConfigBuilder
            Updated ConfigBuilder.
        classifyPropertiesr   )r   r)   s     r   with_classify_propertiesz&ConfigBuilder.with_classify_propertiesb   s     .A)*r   based_on_propertiesc                 $    || j                   d<   | S )a  
        Set properties to build the classification on.

        Parameters
        ----------
        based_on_properties: list
            A list of properties to classify on.

        Returns
        -------
        ConfigBuilder
            Updated ConfigBuilder.
        basedOnPropertiesr   )r   r-   s     r   with_based_on_propertiesz&ConfigBuilder.with_based_on_propertiest   s     -@()r   where_filterc                 d    d| j                   vri | j                   d<   || j                   d   d<   | S )z
        Set Source 'where' Filter.

        Parameters
        ----------
        where_filter : dict
            Filter to use, as a dict.

        Returns
        -------
        ConfigBuilder
            Updated ConfigBuilder.
        filterssourceWherer   r   r1   s     r   with_source_where_filterz&ConfigBuilder.with_source_where_filter   6     DLL(&(DLL#1=Y.r   c                 d    d| j                   vri | j                   d<   || j                   d   d<   | S )z
        Set Training set 'where' Filter.

        Parameters
        ----------
        where_filter : dict
            Filter to use, as a dict.

        Returns
        -------
        ConfigBuilder
            Updated ConfigBuilder.
        r3   trainingSetWherer   r5   s     r   with_training_set_where_filterz,ConfigBuilder.with_training_set_where_filter   s7     DLL(&(DLL#6BY 23r   c                 d    d| j                   vri | j                   d<   || j                   d   d<   | S )z
        Set Target 'where' Filter.

        Parameters
        ----------
        where_filter : dict
            Filter to use, as a dict.

        Returns
        -------
        ConfigBuilder
            Updated ConfigBuilder.
        r3   targetWherer   r5   s     r   with_target_where_filterz&ConfigBuilder.with_target_where_filter   r7   r   c                     d| _         | S )z
        Wait for completion.

        Returns
        -------
        ConfigBuilder
            Updated ConfigBuilder.
        T)r   )r   s    r   with_wait_for_completionz&ConfigBuilder.with_wait_for_completion   s     %)!r   r#   c                 |    d| j                   vr|| j                   d<   | S |D ]  }||   | j                   d   |<    | S )a  
        Set settings for the classification. NOTE if you are using 'kNN'
        the value 'k' can be set by this method or by 'with_k'.
        This method keeps previously set 'settings'.

        Parameters
        ----------
        settings: dict
            Additional settings to be set/overwritten.

        Returns
        -------
        ConfigBuilder
            Updated ConfigBuilder.
        r#   r   )r   r#   keys      r   with_settingszConfigBuilder.with_settings   sR    " T\\)'/DLL$    >08Z(->r   Nc                 6   g d}|D ]  }|| j                   vst        | d       d| j                   v r(t        | j                   d   t              st	        d      | j                   d   dk(  r*d| j                   j                  dg       vrt        d      y	y	)
z
        Validate the current classification configuration.

        Raises
        ------
        ValueError
            If a mandatory field is not set.
        )r   r'   r/   r+   z# is not set for this classificationr#   z!"settings" should be of type dictr   knnr!   z$k is not set for this classificationN)r   
ValueError
isinstancedict	TypeErrorget)r   required_fieldsfields      r   _validate_configzConfigBuilder._validate_config   s     W$ 	PEDLL( E7*M!NOO	P %dll:6= CDD<<5($,,**:r:: !GHH ; )r   c                     	 | j                   j                  d| j                        }|j                  dk(  rt        |d      }|J |S t        d|      # t        $ r}t        d      |d}~ww xY w)aa  
        Start the classification based on the configuration set.

        Returns
        -------
        dict
            Classification result.

        Raises
        ------
        requests.ConnectionError
            If the network connection to weaviate fails.
        weaviate.UnexpectedStatusCodeException
            Unexpected error.
        z/classifications)pathweaviate_objectzClassification may not started.N   zStart classification)r   postr   RequestsConnectionErrorstatus_coder   r	   )r   responseconn_errress       r   _startzConfigBuilder._start   s    "	['',,2DVZVbVb,cH 3&,X7MNC?"?J+,BHMM ' 	[)*KLRZZ	[s   'A 	A0A++A0c                 R   | j                          | j                         }| j                  s|S |d   }| j                  j	                  |      r1t        j                  d       | j                  j	                  |      r1t        t        | j                  j                  |            S )z|
        Start the classification.

        Returns
        -------
        dict
            Classification result.
        idg       @)
rL   rW   r   r   
is_runningtimesleepr   rG   rI   )r   rT   classification_uuids      r   dozConfigBuilder.do  s     	;;=((O 'tn""--.ABJJsO ""--.ABD$..223FGHHr   )r   r   )r   N)__name__
__module____qualname____doc__r   r   strr    intr$   r(   listr,   r0   rG   r6   r:   r=   r?   rB   rL   rW   r^    r   r   r   r      s    *: *?O *$S _ $  ,# / $D _ $D _ $T o (4 O (T o (d  0I.N N6ID Ir   r   )rb   r[   typingr   r   r   r   requests.exceptionsr   rR   weaviate.connectr   weaviate.exceptionsr	   weaviate.utilr
   r   r   r   r   rf   r   r   <module>rl      s5     1 1 J ' = N.]I ]Ir   