
    jKjr                     <   d dl Z d dlZd dlmZ d dlmZ dZdefdZde	defdZ
de	defd	Zde	defd
ZdedefdZdedefdZdedefdZdedefdZdedefdZdedefdZdedefdZdedefdZdedefdZdedefdZdedefdZdedefdZdedefdZy)    N)Any)urlparsez[base64 image redacted]returnc                  b    t         j                  j                  dd      j                         dv S )z@Check if multimodal capture is enabled via environment variable._INTERNAL_LLMA_MULTIMODAL )true1yes)osenvirongetlower     h/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/posthog/ai/sanitization.py_is_multimodal_enabledr   	   s.    ::>>5r:@@B G  r   textc                 2    t        j                  d|       d uS )Nz^data:([^;]+);base64,)rematchr   s    r   is_base64_data_urlr      s    88,d34??r   c                     	 t        |       }t        |j                  xr |j                        S # t        $ r Y nw xY w| j                  d      S )N)/z./z../)r   boolschemenetloc	Exception
startswith)r   results     r   is_valid_urlr"      sL    $FMM3fmm44  ??-..s   -0 	<<c                 j    t        |       ryt        |       dkD  xr t        j                  d|       d uS )NF   z^[A-Za-z0-9+/]+=*$)r"   lenr   r   r   s    r   is_raw_base64r&       s1    Dt9r>Obhh'<dC4OOr   valuec                     t               r| S t        | t              s| S t        |       rt        S t        |       rt        S | S N)r   
isinstancestrr   REDACTED_IMAGE_PLACEHOLDERr&   )r'   s    r   redact_base64_data_urlr-   '   s=    eS!% ))U))Lr   messagesc                     | s| S dt         dt         ffddt         dt         ffd}t        | t              r| D cg c]
  } ||       c}S  ||       S c c}w )Ncontentr   c                     t        | t              r| S | s| S t        | t              r| D cg c]
  } |       c}S  |       S c c}w r)   )r*   r+   list)r0   itemtransform_content_funcs     r   process_contentz)process_messages.<locals>.process_content;   sP    gs#NNgt$=DEWT*40WEE%g.. Fs   Amsgc                 R    t        | t              rd| vr| S i | d | d         iS )Nr0   )r*   dict)r6   r5   s    r   process_messagez)process_messages.<locals>.process_messageG   s4    #t$	(<JB#By/#i."ABBr   )r   r*   r2   )r.   r4   r9   r6   r5   s    `  @r   process_messagesr:   7   sj    
/ 
/ 
/CS CS C
 (D!089$998$$ :s   Ar3   c                    t        | t              s| S | j                  d      dk(  r3t        | j                  d      t              ri | dt	        | d         iS | j                  d      dk(  rFt        | j                  d      t              r'd| d   v r i | di | d   dt	        | d   d         iiS | j                  d      dk(  rd| v rt               r| S i | dt        iS | S )Ntypeinput_image	image_urlurlaudiodata)r*   r8   r   r+   r-   r   r,   r3   s    r   sanitize_openai_imagerC   R   s   dD!xx=(Z8Ms-S

/[0AB
 	
 	K'txx,d3T+&&

 {#-d;.?.FG
 	
 xx7"v~!#K;$; :;;Kr   c                     t        | t              s| S | j                  d      dk(  rd| v ri | dt        | d         iS | S )Nr<   r=   r>   )r*   r8   r   r-   rB   s    r   sanitize_openai_response_imagerE   q   sW    dD!xx=([D-@

/[0AB
 	

 Kr   c                    t               r| S t        | t              s| S | j                  d      dk(  rRt        | j                  d      t              r3| d   j                  d      dk(  rd| d   v ri | di | d   dt        iiS | S )Nr<   imagesourcebase64rA   )r   r*   r8   r   r,   rB   s    r   sanitize_anthropic_imagerJ   ~   s    dD! 	G#txx)40Nv&(2d8n$

 x.2
 	
 Kr   partc                     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_datarA   )r   r*   r8   r,   )rK   s    r   sanitize_gemini_partrN      s    dD! 	tM*D1d=))

 }%2
 	
 Kr   c                     t        | t              s| S d| v rF| d   rA| d   }t        |t              r|D cg c]  }t        |       }}nt        |      }i | d|iS | S c c}w )Nparts)r*   r8   r2   rN   )r3   rP   rK   s      r   process_gemini_itemrQ      sr    dD!$4=WeT"<ABED)$/EEB(/E'$'''K Cs   Ac                 D   t        | t              s| S | j                  d      dk(  rFt        | j                  d      t              r'd| d   v r i | di | d   dt        | d   d         iiS | j                  d      dk(  rd| v ri | dt        | d         iS | j                  d      dk(  rGt        | j                  d      t              r(d| d   v r!t	               r| S i | di | d   dt
        iiS | j                  d      dk(  rd| v ri | dt        | d         iS | S )Nr<   r>   r?   rG   rA   rH   media)r*   r8   r   r-   r   r,   rB   s    r   sanitize_langchain_imagerT      sl   dD! 	K'txx,d3T+&&

 {#-d;.?.FG
 	
 xx7"v~E$E 6tF| DEE 	G#txx)40d8n$!#K

 x.2
 	
 xx7"v~E$E 6tF| DEEKr   rA   c                 "    t        | t              S r)   )r:   rC   rA   s    r   sanitize_openairW      s    D"788r   c                 "    t        | t              S r)   )r:   rE   rV   s    r   sanitize_openai_responserY      s    D"@AAr   c                 "    t        | t              S r)   )r:   rJ   rV   s    r   sanitize_anthropicr[          D":;;r   c                 |    | s| S t        | t              r| D cg c]  }t        |       c}S t        |       S c c}w r)   )r*   r2   rQ   )rA   r3   s     r   sanitize_geminir^      s?    $6:;dd#D)d;;t$$ <s   9c                 "    t        | t              S r)   )r:   rT   rV   s    r   sanitize_langchainr`      r\   r   )r   r   typingr   urllib.parser   r,   r   r   r+   r   r"   r&   r-   r:   rC   rE   rJ   rN   rQ   rT   rW   rY   r[   r^   r`   r   r   r   <module>rc      s]   	 	  !6  @S @T @/s /t /P P P# #  %s %s %6  >
 
 
3 3 0s s .c c  '3 '3 'T9# 9# 9B3 B3 B<S <S <%# %# %<S <S <r   