o
    ¿3Êir  ã                   @   s^  d dl Z d dlZd dlmZ d dlmZ dZdefdd„Zde	defd	d
„Z
de	defdd„Zde	defdd„Zdedefdd„Zdedefdd„Zdedefdd„Zdedefdd„Zdedefdd„Zdedefdd„Zdedefdd „Zdedefd!d"„Zd#edefd$d%„Zd#edefd&d'„Zd#edefd(d)„Zd#edefd*d+„Zd#edefd,d-„ZdS ).é    N)ÚAny)Úurlparsez[base64 image redacted]Úreturnc                   C   s   t j dd¡ ¡ dv S )z@Check if multimodal capture is enabled via environment variable.Ú_INTERNAL_LLMA_MULTIMODALÚ )ÚtrueÚ1Úyes)ÚosÚenvironÚgetÚlower© r   r   úe/lsinfo/ai/hellotax_ai/llm_service/venv_embed/lib/python3.10/site-packages/posthog/ai/sanitization.pyÚ_is_multimodal_enabled	   s   r   Útextc                 C   s   t  d| ¡d uS )Nz^data:([^;]+);base64,)ÚreÚmatch©r   r   r   r   Úis_base64_data_url   s   r   c                 C   s8   zt | ƒ}t|jo|jƒW S  ty   Y nw |  d¡S )N)ú/z./z../)r   ÚboolÚschemeÚnetlocÚ	ExceptionÚ
startswith)r   Úresultr   r   r   Úis_valid_url   s   ÿ
r   c                 C   s(   t | ƒrdS t| ƒdkot d| ¡d uS )NFé   z^[A-Za-z0-9+/]+=*$)r   Úlenr   r   r   r   r   r   Úis_raw_base64    s   r    Úvaluec                 C   s4   t ƒ r| S t| tƒs| S t| ƒrtS t| ƒrtS | S ©N)r   Ú
isinstanceÚstrr   ÚREDACTED_IMAGE_PLACEHOLDERr    )r!   r   r   r   Úredact_base64_data_url'   s   
r&   Úmessagesc                    sX   | s| S dt dt f‡fdd„‰ dt dt f‡ fdd„‰t| tƒr(‡fdd	„| D ƒS ˆ| ƒS )
NÚcontentr   c                    s:   t | tƒr| S | s| S t | tƒr‡ fdd„| D ƒS ˆ | ƒS )Nc                    ó   g | ]}ˆ |ƒ‘qS r   r   ©Ú.0Úitem©Útransform_content_funcr   r   Ú
<listcomp>C   ó    z=process_messages.<locals>.process_content.<locals>.<listcomp>)r#   r$   Úlist)r(   r-   r   r   Úprocess_content;   s   

z)process_messages.<locals>.process_contentÚmsgc                    s.   t | tƒr	d| vr| S i | ¥dˆ | d ƒi¥S )Nr(   )r#   Údict)r3   )r2   r   r   Úprocess_messageG   s   z)process_messages.<locals>.process_messagec                    r)   r   r   )r+   r3   )r5   r   r   r/   M   r0   z$process_messages.<locals>.<listcomp>)r   r#   r1   )r'   r.   r   )r2   r5   r.   r   Úprocess_messages7   s   
r6   r,   c                 C   sÎ   t | tƒs| S |  d¡dkr"t |  d¡tƒr"i | ¥dt| d ƒi¥S |  d¡dkrMt |  d¡tƒrMd| d v rMi | ¥di | d ¥dt| d d ƒi¥i¥S |  d¡dkred| v retƒ r]| S i | ¥dti¥S | S )NÚtypeÚinput_imageÚ	image_urlÚurlÚaudioÚdata)r#   r4   r   r$   r&   r   r%   ©r,   r   r   r   Úsanitize_openai_imageR   s4   
ÿþÿÿÿþþr>   c                 C   s@   t | tƒs| S |  d¡dkrd| v ri | ¥dt| d ƒi¥S | S )Nr7   r8   r9   )r#   r4   r   r&   r=   r   r   r   Úsanitize_openai_response_imageq   s   
ÿþr?   c                 C   sx   t ƒ r| S t| tƒs| S |  d¡dkr:t|  d¡tƒr:| d  d¡dkr:d| d v r:i | ¥di | d ¥dti¥i¥S | S )Nr7   ÚimageÚsourceÚbase64r<   )r   r#   r4   r   r%   r=   r   r   r   Úsanitize_anthropic_image~   s&   
ÿÿÿþþrC   Úpartc                 C   s^   t ƒ r| S t| tƒs| S d| v r-t| d tƒr-d| d v r-i | ¥di | d ¥dti¥i¥S | S )NÚinline_datar<   )r   r#   r4   r%   )rD   r   r   r   Úsanitize_gemini_part–   s$   
ÿÿÿþþrF   c                 C   s\   t | tƒs| S d| v r,| d r,| d }t |tƒr dd„ |D ƒ}nt|ƒ}i | ¥d|i¥S | S )NÚpartsc                 S   ó   g | ]}t |ƒ‘qS r   )rF   )r+   rD   r   r   r   r/   ´   r0   z'process_gemini_item.<locals>.<listcomp>)r#   r4   r1   rF   )r,   rG   r   r   r   Úprocess_gemini_item­   s   

rI   c                 C   s  t | tƒs| S |  d¡dkr2t |  d¡tƒr2d| d v r2i | ¥di | d ¥dt| d d ƒi¥i¥S |  d¡dkrId| v rIi | ¥dt| d ƒi¥S |  d¡dkrst |  d¡tƒrsd| d v rstƒ rc| S i | ¥di | d ¥dti¥i¥S |  d¡dkrŠd| v rŠi | ¥dt| d ƒi¥S | S )Nr7   r9   r:   r@   r<   rA   Úmedia)r#   r4   r   r&   r   r%   r=   r   r   r   Úsanitize_langchain_image½   sF   
ÿÿÿþþÿÿÿþþrK   r<   c                 C   ó
   t | tƒS r"   )r6   r>   ©r<   r   r   r   Úsanitize_openaiç   ó   
rN   c                 C   rL   r"   )r6   r?   rM   r   r   r   Úsanitize_openai_responseë   rO   rP   c                 C   rL   r"   )r6   rC   rM   r   r   r   Úsanitize_anthropicï   rO   rQ   c                 C   s(   | s| S t | tƒrdd„ | D ƒS t| ƒS )Nc                 S   rH   r   )rI   r*   r   r   r   r/   ø   r0   z#sanitize_gemini.<locals>.<listcomp>)r#   r1   rI   rM   r   r   r   Úsanitize_geminió   s
   
rR   c                 C   rL   r"   )r6   rK   rM   r   r   r   Úsanitize_langchainý   rO   rS   )r
   r   Útypingr   Úurllib.parser   r%   r   r   r$   r   r   r    r&   r6   r>   r?   rC   rF   rI   rK   rN   rP   rQ   rR   rS   r   r   r   r   Ú<module>   s,    	
*
