§
    l�’jA$  ã                  óò   — 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d0d!„Zd1d#„Zd2d&„Zg d'¢ZdS )3zÏ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)ÚAnyÚtextÚstrÚargsÚdictÚreturnc                óZ   — |                      dd¦  «        r|                      ¦   «         n| S )NÚstripT)Úgetr   ©r   r   s     ú]C:\Projects\DSCons\.venv\Lib\site-packages\transformers\utils\chat_parsing\content_parsers.pyÚ_textr      s'   € ØŸ8š8 G¨TÑ2Ô2Ð<ˆ4�:Š:‰<Œ<ˆ<¸Ð<ó    Úintc                ó<   — t          t          | |¦  «        ¦  «        S ©N)r   r   r   s     r   Ú_intr      s   € Ý�u�T˜4Ñ Ô Ñ!Ô!Ð!r   Úfloatc                ó<   — t          t          | |¦  «        ¦  «        S r   )r   r   r   s     r   Ú_floatr   !   s   € Ý•�t˜TÑ"Ô"Ñ#Ô#Ð#r   Úboolc                óJ   — t          | |¦  «                             ¦   «         dv S )N)ÚtrueÚ1)r   Úlowerr   s     r   Ú_boolr   %   s#   € Ý��tÑÔ×"Ò"Ñ$Ô$¨Ð5Ð5r   )úúr   c           	     óB  ‡— |                      dg ¦  «        }|                      dd¦  «        }|r!t          | v s	t          | v rt          d¦  «        ‚| }g Š|D ]Y\  }}t	          j        |¦  «        dz   t	          j        |¦  «        z   }dˆfd
„}t	          j        |||t          j        ¬¦  «        }ŒZ|rt	          j        dd|¦  «        }t          ‰¦  «        D ]=\  }	}
| 	                    t          › |	› t          › �t          j        |
¦  «        ¦  «        }Œ>	 t          j        |¦  «        S # t          j        $ rd}|                      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(.*?)Úmr   r	   r   c                ó˜   •— ‰                      |                      d¦  «        ¦  «         t          › t          ‰¦  «        dz
  › t          › �S )Né   )ÚappendÚgroupÚ	_LAX_OPENÚlenÚ
_LAX_CLOSE)r#   Úcaptureds    €r   Ú_capturez_json.<locals>._captureB   s@   ø€ Ø�OŠO˜AŸGšG A™JœJÑ'Ô'Ð'ÝÐ@¥ X¡¤°Ñ!2Ð@µ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   r	   r   )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   Ú_jsonrB   .   s$  ø€ ð —H’H˜_¨bÑ1Ô1€MØ—H’H˜_¨eÑ4Ô4€Màð r�) tÐ+Ð+­z¸TÐ/AÐ/AÝÐpÑqÔqÐqà€GØ€HØ(ð Fð F‰ˆ�Ý”)˜FÑ#Ô# hÑ.µ´¸7Ñ1CÔ1CÑCˆð	Að 	Að 	Að 	Að 	Að 	Aõ ”&˜ (¨G½2¼9ÐEÑEÔEˆˆàð @Ý”&Ð+¨X°wÑ?Ô?ˆå˜(Ñ#Ô#ð Pð P‰ˆˆ1Ø—/’/¥YÐ"?°Ð"?µ:Ð"?Ð"?ÅÄÈAÁÄÑOÔOˆˆð
ÝŒz˜'Ñ"Ô"Ð"øÝÔð ð ð Ø�8Š8Ð$Ñ%Ô%ð 	%Ý˜˜tÑ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ø�dŠ?ˆ?ÝÐjÐVZÐjÐjÐghÐjÐjÑkÔkÐqrÐrÝðHØðHð HØ07ðHð HØDEðHð Hñ
ô 
ð ð	øøøøðøøøs$   ÄD+ Ä+FÄ:$FÅFÅ$5FÆFÚrawÚvalue_parserúdict | Nonec                ó|   — |€| S t          | |                     dd¦  «        |                     di ¦  «        ¦  «        S )NÚnamer   r   )Úparse_contentr   )rC   rD   s     r   Ú
_sub_parserI   [   sA   € ØÐØˆ
Ý˜˜l×.Ò.¨v°vÑ>Ô>À×@PÒ@PÐQWÐY[Ñ@\Ô@\Ñ]Ô]Ð]r   c                óR  — |                      d¦  «        }|€t          d¦  «        ‚|                      d¦  «        }|                      dd¦  «        }i }t          j        || t          j        ¬¦  «        D ]±}|                     ¦   «         }|                      d¦  «        }|€t          d	|› �¦  «        ‚t          |                      d
d¦  «        |¦  «        }	||v rE|rCt          ||         t          ¦  «        s||         g||<   ||          	                    |	¦  «         Œ¬|	||<   Œ²|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_patternNz1xml-inline: 'tag_pattern' content_arg is requiredrD   Úmerge_duplicatesFr-   Úkeyz@xml-inline: tag_pattern must have a named group 'key'. Pattern: ÚvalueÚ )
r   r0   r1   Úfinditerr4   Ú	groupdictrI   Ú
isinstanceÚlistr&   )
r   r   rK   rD   ÚmergeÚoutr#   ÚgroupsrM   rN   s
             r   Ú_xml_inlinerW   a   s)  € ð —(’(˜=Ñ)Ô)€KØÐÝÐLÑMÔMÐMØ—8’8˜NÑ+Ô+€LØ�HŠHÐ'¨Ñ/Ô/€Eà€CÝŒ[˜ dµ"´)Ð<Ñ<Ô<ð ð ˆØ—’‘”ˆØ�jŠj˜ÑÔˆØˆ;ÝÐmÐ`kÐmÐmÑnÔnÐnÝ˜6Ÿ:š: g¨rÑ2Ô2°LÑAÔAˆØ�#ˆ:ˆ:˜%ˆ:Ý˜c #œh­Ñ-Ô-ð &Ø œH˜:��C‘Ø�ŒH�OŠO˜EÑ"Ô"Ð"Ð"àˆC�‰HˆHØ€Jr   c                ó‚  — |                      dd¦  «        }|                      dd¦  «        }|                      d¦  «        }i }|                      |¦  «        D ]e}t          ||¦  «        }|r||vrŒ|                     |d¦  «        \  }}t          ||¦  «        t          ||¦  «        }}t          ||¦  «        ||<   Œf|S )z7Parse line-delimited `key<sep>value` pairs into a dict.Úline_sepú
Úkv_sepú:rD   r%   )r   Úsplitr   rI   )	r   r   rY   r[   rD   rU   ÚlineÚkÚvs	            r   Ú	_kv_linesra   {   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   r   r7   z
xml-inlinezkv-lines>   r   r   r   r   rG   c                ó.   — t          |         | |¦  «        S r   )ÚCONTENT_PARSERS)r   rG   r   s      r   rH   rH   ž   s   € Ý˜4Ô   tÑ,Ô,Ð,r   z	\{(\w+)\}Ú	transformÚscopec                ó¤  ‡— t          | t          ¦  «        r ˆfd„|                      ¦   «         D ¦   «         S t          | t          ¦  «        rˆfd„| D ¦   «         S t          | t          ¦  «        s| S t
                               | ¦  «        }|s| S |                     d¦  «        }|‰vr"t          d|› dt          ‰¦  «        › �¦  «        ‚‰|         S )ztRecursively walk a transform template, which is used to restructure
    parsed output into the actual shape we want.c                ó8   •— i | ]\  }}|t          |‰¦  «        “ŒS © ©Ú_apply_transform)Ú.0r_   r`   re   s      €r   ú
<dictcomp>z$_apply_transform.<locals>.<dictcomp>©   s*   ø€ ÐLÐLÐL±$°!°Q�Õ# A uÑ-Ô-ÐLÐLÐLr   c                ó0   •— g | ]}t          |‰¦  «        ‘ŒS rh   ri   )rk   r`   re   s     €r   ú
<listcomp>z$_apply_transform.<locals>.<listcomp>«   s$   ø€ Ð>Ð>Ð>¨qÕ   EÑ*Ô*Ð>Ð>Ð>r   r%   ztransform placeholder '{z}' is not defined. Available: )
rR   r   ÚitemsrS   r   Ú_PLACEHOLDERÚ	fullmatchr'   ÚKeyErrorÚsorted)rd   re   ÚwholerM   s    `  r   rj   rj   ¥   sî   ø€ õ �)�TÑ"Ô"ð MØLÐLÐLÐL¸)¿/º/Ñ:KÔ:KÐLÑLÔLÐLÝ�)�TÑ"Ô"ð ?Ø>Ð>Ð>Ð>°IÐ>Ñ>Ô>Ð>Ý�i¥Ñ%Ô%ð ØÐÝ×"Ò" 9Ñ-Ô-€EØð ØÐØ
�+Š+�a‰.Œ.€CØ
�%ÐÐÝÐf°3ÐfÐfÕW]Ð^cÑWdÔWdÐfÐfÑgÔgÐgØ�Œ:Ðr   ÚNonec                óž  — t          |t          ¦  «        r)|                     ¦   «         D ]}t          | |¦  «         ŒdS t          |t          ¦  «        r|D ]}t          | |¦  «         ŒdS t          |t
          ¦  «        sdS t                               |¦  «        r/t                               |¦  «        st          | › d|›d�¦  «        ‚dS dS )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.)
rR   r   ÚvaluesÚvalidate_transform_stringsrS   r   rp   Úsearchrq   r0   )re   rd   r`   s      r   rx   rx   ·   s  € õ
 �)�TÑ"Ô"ð Ø×!Ò!Ñ#Ô#ð 	1ð 	1ˆAÝ& u¨aÑ0Ô0Ð0Ð0ØˆÝ�)�TÑ"Ô"ð Øð 	1ð 	1ˆAÝ& u¨aÑ0Ô0Ð0Ð0ØˆÝ�i¥Ñ%Ô%ð ØˆÝ×Ò˜9Ñ%Ô%ð 
­l×.DÒ.DÀYÑ.OÔ.Oð 
ÝØð 5ð 5¨ð 5ð 5ð 5ñ
ô 
ð 	
ð
ð 
ð 
ð 
r   ÚbodyÚcapturesc           	     ó   — t          | |j        |j        ¦  «        }|j        €|S |j        r¹t          |t          ¦  «        s-t          d|j        › dt          |¦  «        j
        › d�¦  «        ‚g }|D ]p}t          |t          ¦  «        s-t          d|j        › dt          |¦  «        j
        › d�¦  «        ‚|                     t          |j        i |¥|¥¦  «        ¦  «         Œq|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.Nz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)rH   r~   Úcontent_argsrd   Útransform_eachrR   rS   r0   rG   ÚtypeÚ__name__r   r&   rj   )rz   Úfieldr{   rN   rU   Úitems         r   Úprocess_fieldr…   Î   sD  € õ ˜$ ¤¨uÔ/AÑBÔB€EØ„ÐØˆØÔð Ý˜%¥Ñ&Ô&ð 	Ýð/˜%œ*ð /ð /Ý˜E‘{”{Ô+ð/ð /ð /ñô ð ð ˆØð 	Pð 	PˆDÝ˜d¥DÑ)Ô)ð Ý ð2˜eœjð 2ð 2Ý ™:œ:Ô.ð2ð 2ð 2ñô ð ð �JŠJÕ'¨¬Ð9M¸HÐ9MÈÐ9MÑNÔNÑOÔOÐOÐOØˆ
Ý˜EœOÐ-K°Ð-K¸)ÀUÐ-KÐ-KÑLÔLÐLr   )rc   ÚSTREAMABLE_PARSERSrH   r…   rx   )r   r   r   r   r	   r   )r   r   r   r   r	   r   )r   r   r   r   r	   r   )r   r   r   r   r	   r   )r   r   r   r   r	   r   )rC   r   rD   rE   r	   r   )r   r   r   r   r	   r   )r   r   rG   r   r   r   r	   r   )rd   r   re   r   r	   r   )re   r   rd   r   r	   ru   )rz   r   r{   r   r	   r   )Ú__doc__Ú
__future__r   r7   Útypingr   Úregexr1   r   r   r   r   r(   r*   rB   rI   rW   ra   rc   Ú	frozensetr†   rH   Úcompilerp   rj   rx   r…   Ú__all__rh   r   r   ú<module>rŽ      sµ  ððjð jð #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð à Ð Ð Ð ð=ð =ð =ð =ð"ð "ð "ð "ð$ð $ð $ð $ð6ð 6ð 6ð 6ð 'Ñ €	ˆ:ð*ð *ð *ð *ðZ^ð ^ð ^ð ^ðð ð ð ð4ð ð ð ð$ ØØØØØØðð €ð �YÐ?Ð?Ð?Ñ@Ô@Ð ð-ð -ð -ð -ð ˆrŒz˜,Ñ'Ô'€ðð ð ð ð$
ð 
ð 
ð 
ð.Mð Mð Mð Mð8ð ð €€€r   