Ë
    ÜÓ^jQ#  ã                  óî   — d Z ddlmZ ddlZddlmZ ddlZdd„Zdd„Z	dd„Z
dd„Zd	\  ZZdd
„Zdd„Zdd„Zdd„Zee	e
eeeedœZ eh d£«      Zdd„Z ej,                  d«      Zdd„Zdd„Zd d„Zg d¢Zy)!zÏThis file contains the parsers used by chat response parsing. Each parser takes a chunk of captured text
and parses it into a single key in the output message dictionary. Functions are generally boilerplate.é    )ÚannotationsN)ÚAnyc                óJ   — |j                  dd«      r| j                  «       S | S )NÚstripT)Úgetr   ©ÚtextÚargss     úz/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/utils/chat_parsing/content_parsers.pyÚ_textr      s    € ØŸ8™8 G¨TÔ2ˆ4�:‰:‹<Ð<¸Ð<ó    c                ó,   — t        t        | |«      «      S ©N)Úintr   r   s     r   Ú_intr      s   € ÜŒu�T˜4Ó Ó!Ð!r   c                ó,   — t        t        | |«      «      S r   )Úfloatr   r   s     r   Ú_floatr   !   s   € Ü”�t˜TÓ"Ó#Ð#r   c                ó:   — t        | |«      j                  «       dv S )N)ÚtrueÚ1)r   Úlowerr   s     r   Ú_boolr   %   s   € Ü��tÓ×"Ñ"Ó$¨Ð5Ð5r   )úúc           	     ó  ‡— |j                  dg «      }|j                  dd«      }|rt        | v st        | v rt        d«      ‚| }g Š|D ]`  \  }}t	        j
                  |«      dz   t	        j
                  |«      z   }dˆfd„}t	        j                  |||t        j                  ¬«      }Œb |rt	        j                  dd	|«      }t        ‰«      D ]8  \  }	}
|j                  t        › |	› t        › �t        j                  |
«      «      }Œ: 	 t        j                  |«      S # t        j                  $ rS}|j                  d
«      rt        | |«      cY d}~S || k(  rt        d| ›d|› �«      |‚t        d| ›d|›d|› �«      |‚d}~ww xY w)a�  JSON parser with optional dialect knobs for LLM-emitted quirks.

    `args`:
      - `unquoted_keys` (bool): quote bare-identifier keys before parsing.
      - `string_delims` ([[open, close], ...]): strings delimited by these
        custom markers are pre-extracted, then restored as standard JSON strings.
      - `allow_non_json` (bool): return stripped text if parsing fails.
    Ústring_delimsÚunquoted_keysFzSjson: input contains reserved sentinel characters (\x01/\x02); cannot parse safely.z(.*?)c                ó|   •— ‰j                  | j                  d«      «       t        › t        ‰«      dz
  › t        › �S )Né   )ÚappendÚgroupÚ	_LAX_OPENÚlenÚ
_LAX_CLOSE)ÚmÚcaptureds    €r   Ú_capturez_json.<locals>._captureB   s4   ø€ Ø�O‰O˜AŸG™G A›JÔ'Ü�[¤ X£°Ñ!2Ð 3´J°<Ð@Ð@r   ©Úflagsz(?<=[{,])(\w+):z"\1":Úallow_non_jsonNz5json parser could not parse region as JSON.
Content: z
Error: z:json: could not parse after dialect transforms.
Original: z
Transformed: )r&   r   ÚreturnÚstr)r   r#   r%   Ú
ValueErrorÚreÚescapeÚsubÚDOTALLÚ	enumerateÚreplaceÚjsonÚdumpsÚloadsÚJSONDecodeErrorr   )r	   r
   r   r   ÚworkingÚopen_dÚclose_dÚpatternr(   ÚiÚsÚer'   s               @r   Ú_jsonr@   .   s“  ø€ ð —H‘H˜_¨bÓ1€MØ—H‘H˜_¨eÓ4€Máœ) tÑ+¬z¸TÑ/AÜÐpÓqÐqà€GØ€HØ(ò F‰ˆ�Ü—)‘)˜FÓ# hÑ.´·±¸7Ó1CÑCˆõ	Aô —&‘&˜ (¨G¼2¿9¹9ÔE‰ðFñ Ü—&‘&Ð+¨X°wÓ?ˆä˜(Ó#ò P‰ˆˆ1Ø—/‘/¤Y K°¨s´:°,Ð"?ÄÇÁÈAÃÓO‰ðPð
Ü�z‰z˜'Ó"Ð"øÜ×Ñò Ø�8‰8Ð$Ô%Ü˜˜tÓ$Õ$Ø�dŠ?ÜÐUÐVZÐU]Ð]fÐghÐfiÐjÓkÐqrÐrÜðØ˜ °¨{¸)ÀAÀ3ðHó
ð ð	ûðús$   ÄD! Ä!FÄ4FÅFÅ,FÆFc                ód   — |€| S t        | |j                  dd«      |j                  di «      «      S )NÚnamer	   r
   )Úparse_contentr   )ÚrawÚvalue_parsers     r   Ú
_sub_parserF   [   s8   € ØÐØˆ
Ü˜˜l×.Ñ.¨v°vÓ>À×@PÑ@PÐQWÐY[Ó@\Ó]Ð]r   c                óô  — |j                  d«      }|€t        d«      ‚|j                  d«      }|j                  dd«      }i }t        j                  || t        j                  ¬«      D ]‹  }|j                  «       }|j                  d«      }|€t        d|› �«      ‚t        |j                  d	d
«      |«      }	||v r3|r1t        ||   t        «      s	||   g||<   ||   j                  |	«       Œ‡|	||<   Œ� |S )zÇParse shallow XML-ish tags into a dict. `tag_pattern` regex must have named
    groups `key` and `value`. Optional `value_parser` recurses; `merge_duplicates`
    collects duplicate keys into a list.Útag_patternz1xml-inline: 'tag_pattern' content_arg is requiredrE   Úmerge_duplicatesFr)   Úkeyz@xml-inline: tag_pattern must have a named group 'key'. Pattern: ÚvalueÚ )
r   r.   r/   Úfinditerr2   Ú	groupdictrF   Ú
isinstanceÚlistr!   )
r	   r
   rH   rE   ÚmergeÚoutr&   ÚgroupsrJ   rK   s
             r   Ú_xml_inlinerT   a   sø   € ð —(‘(˜=Ó)€KØÐÜÐLÓMÐMØ—8‘8˜NÓ+€LØ�H‰HÐ'¨Ó/€Eà€CÜ�[‰[˜ d´"·)±)Ô<ò ˆØ—‘“ˆØ�j‰j˜ÓˆØˆ;ÜÐ_Ð`kÐ_lÐmÓnÐnÜ˜6Ÿ:™: g¨rÓ2°LÓAˆØ�#‰:™%Ü˜c #™h¬Ô-Ø ™H˜:��C‘Ø�‰H�O‰O˜EÕ"àˆC�ŠHðð €Jr   c                ó>  — |j                  dd«      }|j                  dd«      }|j                  d«      }i }| j                  |«      D ]Q  }t        ||«      }|r||vrŒ|j                  |d«      \  }}t        ||«      t        ||«      }}t        ||«      ||<   ŒS |S )z7Parse line-delimited `key<sep>value` pairs into a dict.Úline_sepú
Úkv_sepú:rE   r    )r   Úsplitr   rF   )	r	   r
   rV   rX   rE   rR   ÚlineÚkÚvs	            r   Ú	_kv_linesr^   {   s¦   € à�x‰x˜
 DÓ)€HØ�X‰X�h Ó$€FØ—8‘8˜NÓ+€Là€CØ—
‘
˜8Ó$ò -ˆÜ�T˜4Ó ˆÙ�v TÑ)ØØ�z‰z˜& !Ó$‰ˆˆ1Ü�Q˜‹~œu Q¨›~ˆ1ˆÜ˜A˜|Ó,ˆˆAŠð-ð €Jr   )r	   r   r   Úboolr5   z
xml-inlinezkv-lines>   r   r_   r	   r   c                ó    — t        |   | |«      S r   )ÚCONTENT_PARSERS)r	   rB   r
   s      r   rC   rC   ž   s   € Ü˜4Ñ   tÓ,Ð,r   z	\{(\w+)\}c           	     ó¦  — t        | t        «      r.| j                  «       D ��ci c]  \  }}|t        ||«      “Œ c}}S t        | t        «      r| D �cg c]  }t        ||«      ‘Œ c}S t        | t
        «      s| S t        j                  | «      }|s| S |j                  d«      }||vrt        d|› dt        |«      › �«      ‚||   S c c}}w c c}w )ztRecursively walk a transform template, which is used to restructure
    parsed output into the actual shape we want.r    ztransform placeholder '{z}' is not defined. Available: )rO   ÚdictÚitemsÚ_apply_transformrP   r-   Ú_PLACEHOLDERÚ	fullmatchr"   ÚKeyErrorÚsorted)Ú	transformÚscoper\   r]   ÚwholerJ   s         r   re   re   ¥   sÍ   € ô �)œTÔ"Ø:C¿/¹/Ó:K×L±$°!°Q�Ô# A uÓ-Ñ-ÓLÐLÜ�)œTÔ"Ø4=Ö>¨qÔ   EÕ*Ò>Ð>Ü�i¤Ô%ØÐÜ×"Ñ" 9Ó-€EÙØÐØ
�+‰+�a‹.€CØ
�%ÑÜÐ2°3°%Ð7VÔW]Ð^cÓWdÐVeÐfÓgÐgØ�‰:Ðùó Mùâ>s   ¤CÁCc                óJ  — t        |t        «      r"|j                  «       D ]  }t        | |«       Œ yt        |t        «      r|D ]  }t        | |«       Œ yt        |t
        «      syt        j                  |«      r't        j                  |«      st        | › d|›d�«      ‚yy)a$  Walk a transform template and reject any string that mixes a `{name}`
    placeholder with literal text. Only whole-string placeholders (e.g.
    `"{content}"`) and plain literals are supported. Called from the template
    loader so authors get a clear error at load time, not at parse time.Nz: transform string z� mixes a {placeholder} with literal text. Use either a whole-string placeholder (e.g. "{content}") or a plain literal; string interpolation is not supported.)
rO   rc   ÚvaluesÚvalidate_transform_stringsrP   r-   rf   Úsearchrg   r.   )rk   rj   r]   s      r   ro   ro   ·   s­   € ô
 �)œTÔ"Ø×!Ñ!Ó#ò 	1ˆAÜ& u¨aÕ0ð	1àÜ�)œTÔ"Øò 	1ˆAÜ& u¨aÕ0ð	1àÜ�i¤Ô%ØÜ×Ñ˜9Ô%¬l×.DÑ.DÀYÔ.OÜØˆgÐ(¨¨ð 65ð 5ó
ð 	
ð /PÐ%r   c           	     ó  — t        | |j                  |j                  «      }|j                  €|S |j                  r²t        |t        «      s/t        d|j                  › dt        |«      j                  › d�«      ‚g }|D ]j  }t        |t        «      s/t        d|j                  › dt        |«      j                  › d�«      ‚|j                  t        |j                  i |¥|¥«      «       Œl |S t        |j                  i |¥d|i¥«      S )a~  Run `body` through the field's content parser, then optionally apply the
    transform template. When `transform_each` is set, the parsed content must
    be a list and the template is applied to each element (with the element's
    keys unpacked into the template scope, alongside any regex captures).

    `field` is a `spec.Field`; typed via duck-typing to avoid a cyclic import.zField 'z@': transform_each requires the parsed content to be a list, got ú.z?': transform_each requires each list element to be a dict, got Úcontent)rC   rs   Úcontent_argsrj   Útransform_eachrO   rP   r.   rB   ÚtypeÚ__name__rc   r!   re   )ÚbodyÚfieldÚcapturesrK   rR   Úitems         r   Úprocess_fieldr|   Î   s  € ô ˜$ §¡¨u×/AÑ/AÓB€EØ‡�ÐØˆØ×ÒÜ˜%¤Ô&ÜØ˜%Ÿ*™*˜ð &Ü˜E“{×+Ñ+Ð,¨Að/óð ð ˆØò 	PˆDÜ˜d¤DÔ)Ü Ø˜eŸj™j˜\ð *Ü ›:×.Ñ.Ð/¨qð2óð ð �J‰JÔ'¨¯©Ð9M¸HÐ9MÈÐ9MÓNÕOð	Pð ˆ
Ü˜EŸO™OÐ-K°Ð-K¸)ÀUÑ-KÓLÐLr   )ra   ÚSTREAMABLE_PARSERSrC   r|   ro   )r	   r-   r
   rc   r,   r-   )r	   r-   r
   rc   r,   r   )r	   r-   r
   rc   r,   r   )r	   r-   r
   rc   r,   r_   )r	   r-   r
   rc   r,   r   )rD   r-   rE   zdict | Noner,   r   )r	   r-   r
   rc   r,   rc   )r	   r-   rB   r-   r
   rc   r,   r   )rj   r   rk   rc   r,   r   )rk   r-   rj   r   r,   ÚNone)rx   r-   rz   rc   r,   r   )Ú__doc__Ú
__future__r   r5   Útypingr   Úregexr/   r   r   r   r   r#   r%   r@   rF   rT   r^   ra   Ú	frozensetr}   rC   Úcompilerf   re   ro   r|   Ú__all__© r   r   ú<module>r‡      s©   ðñjõ #ã Ý ã ó=ó"ó$ó6ð 'Ñ €	ˆ:ó*óZ^óó4ð$ ØØØØØØñ€ñ Ò?Ó@Ð ó-ð ˆr�z‰z˜,Ó'€óó$
ó.Mò8�r   