a
    dg                     @   s:   d dl Z d dlmZmZmZ d dlmZ G dd dZdS )    N)AnyDictOptional)ModerationPiiErrorc                   @   sz   e Zd ZdZdeee ee ee ddddZdeeedddZdeeedd	d
Z	eee
eef  edddZdS )ComprehendPIIzEClass to handle Personally Identifiable Information (PII) moderation.N)clientcallback	unique_idchain_idreturnc                 C   s$   || _ |ddd| _|| _|| _d S )NZPIIZLABELS_NOT_FOUND)Zmoderation_chain_idZmoderation_typemoderation_status)r   moderation_beaconr   r	   )selfr   r   r	   r
    r   ~/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_experimental/comprehend_moderation/pii.py__init__   s    zComprehendPII.__init__)prompt_valueconfigr   c                 C   s*   | d}|r| j||dS | j||dS )Nredact)r   r   )get_detect_pii_contains_pii)r   r   r   r   r   r   r   validate   s
    
zComprehendPII.validatec                 C   s   | j j|dd}| jr2| jjr2|| jd< || jd< |d}|d}d}|d D ]4}|d	 |krn|d
 |v s~|d	 |krR|sRd} qqR| jr| jjr|rd| jd< t| j| j| j	 |rt
|S )aM  
        Checks for Personally Identifiable Information (PII) labels above a
        specified threshold. Uses Amazon Comprehend Contains PII Entities API. See -
        https://docs.aws.amazon.com/comprehend/latest/APIReference/API_ContainsPiiEntities.html
        Args:
            prompt_value (str): The input text to be checked for PII labels.
            config (Dict[str, Any]): Configuration for PII check and actions.

        Returns:
            str: the original prompt

        Note:
            - The provided client should be initialized with valid AWS credentials.
        enTextZLanguageCodemoderation_inputmoderation_output	thresholdlabelsFZLabelsScoreNameTLABELS_FOUNDr   )r   Zcontains_pii_entitiesr   pii_callbackr   r   asynciocreate_taskon_after_piir	   r   )r   r   r   pii_identifiedr   
pii_labels	pii_foundentityr   r   r   r   $   s4    





zComprehendPII._contains_piic                 C   s  | j j|dd}| jr2| jjr2|| jd< || jd< |d g krh| jrd| jjrdt| j| j| j |S d}|s|d r|d D ]}|d dkrd	} qq| jr| jjr|rd
| jd< t| j| j| j |rt	n|
d}|
d}|
d}d}|d D ]}|r(|d |v r(|d |ks<|s|d |krd	}|d }	|d }
|
|	 d }|| }|d|	 | ||
d d  }q| jr| jjr|rd
| jd< t| j| j| j |S )a  
        Detects and handles Personally Identifiable Information (PII) entities in the
        given prompt text using Amazon Comprehend's detect_pii_entities API. The
        function provides options to redact or stop processing based on the identified
        PII entities and a provided configuration. Uses Amazon Comprehend Detect PII
        Entities API.

        Args:
            prompt_value (str): The input text to be checked for PII entities.
            config (Dict[str, Any]): A configuration specifying how to handle
                                     PII entities.

        Returns:
            str: The processed prompt text with redacted PII entities or raised
                 exceptions.

        Raises:
            ValueError: If the prompt contains configured PII entities for
                        stopping processing.

        Note:
            - If PII is not found in the prompt, the original prompt is returned.
            - The client should be initialized with valid AWS credentials.
        r   r   r   r   ZEntitiesFr    g      ?Tr"   r   r   r   Zmask_characterTypeZBeginOffsetZ	EndOffset   N)r   Zdetect_pii_entitiesr   r#   r   r$   r%   r&   r	   r   r   )r   r   r   r'   r)   r*   r   r(   Zmask_markerZchar_offset_beginZchar_offset_endZmask_lengthZmasked_partr   r   r   r   O   sv    










zComprehendPII._detect_pii)NNN)N)N)__name__
__module____qualname____doc__r   r   strr   r   r   r   r   r   r   r   r   r   	   s      +r   )r$   typingr   r   r   ZGlangchain_experimental.comprehend_moderation.base_moderation_exceptionsr   r   r   r   r   r   <module>   s   