o
    پi                     @   s"   d dl Z d dlZG dd dZdS )    Nc                   @   sd   e Zd Z			dddZdd Zdd	 Zd
d Zdd Zdd Zdd Z	dd Z
dd Zdd ZdS )TestRegexConstrainedMixinFr      c           
   	   C   s   t j| jd ||dkrdndd||dd||ddd	}| }ttj|d
d td t|ts<| dt	|  |D ] }|
dd }	|	sO| d | |	|s^| d|	 d q>d S )Nz	/generater   r   g      ?   )temperaturemax_new_tokensnregexF)textsampling_paramsstreamreturn_logprobtop_logprobs_numlogprob_start_len)json   )indentzd====================================================================================================z(Expected response to be a list, but got r	    zGenerated text is empty.zText 'z' does not match regex pattern.)requestspostbase_urlr   printdumps
isinstancelistfailtypegetstripregex_match)
selfr   promptr   r   r   responseretitemr	    r$   Z/home/ubuntu/.local/lib/python3.10/site-packages/sglang/test/kits/regex_constrained_kit.py_run_decode_regex   s6   

z+TestRegexConstrainedMixin._run_decode_regexc                 C   s   dd l }|||d uS )Nr   )rematch)r   r	   patternr'   r$   r$   r%   r   /   s   z%TestRegexConstrainedMixin.regex_matchc                 C      d}d}| j ||dd d S )Nz^user@example\.com$zGenerate an email address:   r   r    r   r&   r   r)   r    r$   r$   r%   test_regex_generate_email4      
z3TestRegexConstrainedMixin.test_regex_generate_emailc                 C   r*   )Nz^(Hello|Hi|Hey)$zGenerate a greeting:r+   r,   r-   r.   r$   r$   r%   test_regex_generate_greeting>   r0   z6TestRegexConstrainedMixin.test_regex_generate_greetingc                 C   r*   )Nz^\d{3}$zGenerate a three-digit number:r+   r,   r-   r.   r$   r$   r%   test_regex_generate_numberH   r0   z4TestRegexConstrainedMixin.test_regex_generate_numberc                 C   r*   )Nz^\(\d{3}\) \d{3}-\d{4}$zGenerate a phone number:r+   r,   r-   r.   r$   r$   r%   test_regex_generate_phoneR   r0   z3TestRegexConstrainedMixin.test_regex_generate_phonec                 C   r*   )Nz,^2024-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$z%Generate a date in YYYY-MM-DD format:r+   r,   r-   r.   r$   r$   r%   test_regex_generate_date\   r0   z2TestRegexConstrainedMixin.test_regex_generate_datec                 C   r*   )Nz^#[0-9A-F]{6}$zGenerate a hex color code:r+   r,   r-   r.   r$   r$   r%   test_regex_generate_hex_colorf   r0   z7TestRegexConstrainedMixin.test_regex_generate_hex_colorc                 C   r*   )Nzi^\{\s*"name"\s*:\s*"[a-zA-Z0-9 ]+"\s*,\s*"age"\s*:\s*[1-9][0-9]*\s*,\s*"city"\s*:\s*"[a-zA-Z0-9 ]+"\s*\}$z0Generate a simple JSON with name, age, and city:r+   r,   r-   r.   r$   r$   r%    test_regex_generate_complex_jsonp   r0   z:TestRegexConstrainedMixin.test_regex_generate_complex_jsonc                 C   r*   )NzP^\[2024-01-01T12:00:00Z\] INFO: System\.process - Operation [a-z]+ successfully$zGenerate a log entry:r+   r,   r-   r.   r$   r$   r%   %test_regex_generate_custom_log_formatz   r0   z?TestRegexConstrainedMixin.test_regex_generate_custom_log_formatN)Fr   r   )__name__
__module____qualname__r&   r   r/   r1   r2   r3   r4   r5   r6   r7   r$   r$   r$   r%   r      s    
(






r   )r   r   r   r$   r$   r$   r%   <module>   s    