+
    œ°³j*  ã                  óê   € R t ^ RIHt ^ RIHt ^ RIHt ^ RIt^RI	H
t
 ^RIHtHt ]
P                  ! ]4      t] ! R R4      4       t] ! R	 R
4      4       tR R ltR R ltR R ltR R lt. ROtR# )z<Template loading and validation for response_template dicts.)Úannotations)Ú	dataclass)ÚAnyN)Úlogging)ÚCONTENT_PARSERSÚvalidate_transform_stringsc                  ó¤   € ] tR t^t$ 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tR# )ÚResponseTemplateFieldÚstrÚnamer   Úopen_reúlist[str] | NoneÚopen_literalsÚboolÚopen_literal_can_extendÚclose_reÚclose_literalsÚclose_literal_can_extendÚcontentÚdictÚcontent_argsÚrepeatsú
str | NoneÚjoinÚoptionalÚ	transformÚtransform_each© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r   ó    Ús/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/utils/chat_parsing/response_templates.pyr	   r	      sO   ‡ à
ƒIØƒLØ#Ó#Ø!Ó!ØƒMØ$Ó$Ø"Ó"ØƒLØÓØƒMØ
ÓØƒNØƒNØ×r$   r	   c                  ó^   € ] tR t^0t$ R]R&   R]R&   R]R&   RtR]R	&   RtR
]R&   R R ltRtR# )ÚResponseTemplater   Údefaultsz dict[str, ResponseTemplateField]Úfieldsr   Ústart_anchor_reNr   Úimplicitr   Ústart_anchor_literalsc               ó    € V ^8„  d   QhRRRR/# )é   Útextr
   Úreturnr   )Úformats   "r%   Ú__annotate__ÚResponseTemplate.__annotate__8   s   € ÷ ñ ¨cð °cñ r$   c                óÔ   € RpV P                   P                  V4       F  pVP                  4       pK  	  Vf.   V P                  e   RMRp\        P                  RV R24       V# WR # )a~  When parsing responses, we can't just parse the tokens generated
by the model. This is because chat templates often include early parts of the message such as <start_of_turn>
or <think> tokens in the prefill. Therefore, we take the whole chat as input, but truncate to the start
of the most recent assistant message, which can include tokens from the template as well as the output.NÚstart_anchorÚstart_anchor_patternzresponse_template defines z_ but the anchor was not found in the prefix; the parser will process the entire prefix instead.)r*   ÚfinditerÚendr,   ÚloggerÚinfo)Úselfr/   Úlast_endÚmÚkinds   &&   r%   Útruncate_past_last_anchorÚ*ResponseTemplate.truncate_past_last_anchor8   sx   € ð
  $ˆØ×%Ñ%×.Ñ.¨tÖ4ˆAØ—u‘u“wŠHñ 5àÒØ%)×%?Ñ%?Ò%K‘>ÐQgˆDÜ�K‰KØ,¨T¨Fð 3Tð Tôð ˆKØ�IˆÐr$   r   )	r   r   r    r!   r"   r+   r,   r?   r#   r   r$   r%   r'   r'   0   s3   ‡ àƒNØ,Ó,ØÓØ€HˆjÓØ.2ÐÐ+Ó2÷ñ r$   r'   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r.   Úscoper
   Úfieldr   Úliteral_keyÚpattern_keyr0   z"tuple[Any, list[str] | None, bool]r   )r1   s   "r%   r2   r2   J   s0   € ÷ -ñ -˜3ð - tð -¸#ð -ÈCð -ÐTvñ -r$   c           	     ó’  a	€ W!9   d   W19   d   \        V  RV RV R24      hW!9   Ed¹   W,          p\        V\        4      '       d   V.o	M¿\        V\        4      '       d„   V'       g   \        V  RV R24      h\        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       g   \        V  RV R	24      h\        \
        P                  V4      4      o	M&\        V  RV R
\        V4      P                   24      h\        ;QJ d    R S	 4       F  '       g   K   RM	  RM! R S	 4       4      '       d   \        V  RV R24      h\        S	\        RR7      p\        ;QJ d    V	3R lS	 4       F  '       g   K   RM	  RM! V	3R lS	 4       4      pRP                  R V 4       4      p\        P                  ! V\        P                  4      S	V3# W19   d0    \        P                  ! W,          \        P                  4      RR3# R#   \        P                    d   p\        T  RT RT 24      ThRp?ii ; i)an  Compile a region's start/end anchor. An anchor can be:

- a regex (`pattern_key`),
- a single literal string (`literal_key`), or
- a list of literal strings (`literal_key`), in which case any of these match

All forms compile to a regex for matching, but we keep the literal strings around too: when present,
the parser can emit regions faster, since it knows exactly how many trailing bytes might be a
partial-match prefix (and that a finished literal match can never be extended by future bytes, except
when a literal is a strict prefix of another in the same list).

Returns `(compiled_re, literals, can_extend)`:

- `compiled_re`: the compiled pattern.
- `literals`: the literal strings, or `None` for a regex anchor.
- `can_extend`: `True` iff one literal is a strict prefix of another, in which case a match at the
  buffer edge could still be lengthened by future input.
z: cannot specify both 'z' and 'Ú'z: 'z(' list must contain at least one literalc              3  óB   "  € T F  p\        V\        4      x € K  	  R # 5i©N)Ú
isinstancer
   ©Ú.0Úss   & r%   Ú	<genexpr>Ú"_compile_anchor.<locals>.<genexpr>f   s   é € Ð7±3¨a”z !¤S×)Ð)³3ùs   ‚FTz ' list must contain only stringsz+' must be a string or list of strings, got c              3  ó*   "  € T F	  qR 8H  x € K  	  R# 5i)Ú Nr   rK   s   & r%   rN   rO   k   s   é € Ð)¡˜1�BŽw£ùs   ‚z"' literals cannot be empty strings)ÚkeyÚreversec              3  óp   <"  € T F+  pS F"  q!V8g  ;'       d    VP                  V4      x € K$  	  K-  	  R # 5irI   )Ú
startswith)rL   ÚaÚbÚliteralss   &  €r%   rN   rO   o   s/   øé € ÐX¹X¸ËxÈ!˜a™×3Ð3 A§L¡L°£OÔ3ÉxÑ3»Xùs   ƒ6˜6Ú|c              3  óN   "  € T F  p\         P                  ! V4      x € K  	  R # 5irI   )ÚreÚescaperK   s   & r%   rN   rO   p   s   é € Ð9±¨Aœ2Ÿ9š9 QŸ<˜<³ùs   ‚#%Nz
: invalid z regex: )NNF)Ú
ValueErrorrJ   r
   ÚlistÚallr   ÚfromkeysÚtyper   ÚanyÚsortedÚlenr   r[   ÚcompileÚDOTALLÚerror)
rB   rC   rD   rE   ÚrawÚorderedÚ
can_extendÚpatternÚerX   s
   &&&&     @r%   Ú_compile_anchorrm   J   sõ  ø€ ð& Ô Ô 4Ü˜E˜7Ð"9¸+¸ÀgÈkÈ]ÐZ[Ð\Ó]Ð]ØÕØÕ ˆÜ�cœ3×ÒØ�u‰HÜ˜œT×"Ò"ßÜ  E 7¨#¨k¨]Ð:bÐ!cÓdÐdß“3Ñ7±3Ó7—3—3’3Ñ7±3Ó7×7Ò7Ü  E 7¨#¨k¨]Ð:ZÐ![Ó\Ð\ÜœDŸM™M¨#Ó.Ó/‰Hä ˜w c¨+¨Ð6aÔbfÐgjÓbk×btÑbtÐauÐvÓwÐwß‹3Ñ)¡Ó)�3�3Š3Ñ)¡Ó)×)Ò)Ü ˜w c¨+¨Ð6XÐYÓZÐZä˜¤s°DÔ9ˆß“SÔX¹XÓX—S—S’SÔX¹XÓXÓXˆ
Ø—(‘(Ñ9±Ó9Ó9ˆÜ�zŠz˜'¤2§9¡9Ó-¨x¸ÐCÐCØÔð	RÜ—:’:˜eÕ0´"·)±)Ó<¸dÀEÐIÐIð Ðøô �x‰xô 	RÜ ˜w j°°¸XÀaÀSÐIÓJÐPQÐQûð	Rús   Ç(-H ÈIÈ-IÉIc               ó    € V ^8„  d   QhRRRR/# )r.   Úspecr   r0   ÚNoner   )r1   s   "r%   r2   r2   z   s   € ÷ Nñ N 4ð N¨Dñ Nr$   c                ó   € \        V \        4      '       g"   \        R\        V 4      P                   24      hV P                  R^4      pV^8w  d   \        RV 24      h\        V 4      0 R
m,
          ;p'       d   \        R\        V4       24      h\        V P                  R/ 4      \        4      '       g   \        R4      hV P                  R/ 4      p\        V\        4      '       d	   V'       g   \        R4      hR	# )zåValidate the top-level response_template structure: it must be a dict of the expected version with
only known keys, a dict of `defaults`, and a non-empty dict of `fields`. Per-field specs are checked
separately in `_build_field`.z&response_template must be a dict, got Úversionz'Unsupported response_template version: r(   r)   z#Unknown keys in response_template: z)response_template.defaults must be a dictz1response_template.fields must be a non-empty dictN>   r)   rr   r(   r5   r6   )rJ   r   r]   ra   r   ÚgetÚsetrc   )ro   rr   Úunknown_template_keysÚ
fields_raws   &   r%   Ú_validate_template_shaperw   z   sÝ   € ô �dœD×!Ò!ÜÐAÄ$ÀtÃ*×BUÑBUÐAVÐWÓXÐXØ�h‰h�y !Ó$€GØ�!„|ÜÐBÀ7À)ÐLÓMÐMÜ # D£	Ò,uÕ uÐuÐÖuÜÐ>¼vÐF[Ó?\Ð>]Ð^Ó_Ð_Ü�d—h‘h˜z¨2Ó.´×5Ò5ÜÐDÓEÐEØ—‘˜( BÓ'€JÜ�j¤$×'Ò'¯zÜÐLÓMÐMñ 0:r$   c               ó$   € V ^8„  d   QhRRRRRR/# )r.   r   r
   rC   r   r0   r	   r   )r1   s   "r%   r2   r2   Œ   s'   € ÷ Eñ E�sð E 4ð EÐ,Añ Er$   c                óä  € 0 RmpRV  R2p\        V\        4      '       g   \        V R24      h\        V4      V,
          ;p'       d   \        V R\	        V4       24      hVP                  RR4      pV\        9  d!   \        V RV R\	        \        4       24      h\        W1RR4      w  rgp\        W1RR4      w  ršpVP                  R4      pVe:   \        V\        4      '       g$   \        V R\        V4      P                   24      hVe'   VP                  RR4      '       g   \        V R24      hVP                  R
4      pVP                  RR4      p\        V\        4      '       g$   \        V R\        V4      P                   24      hV'       d   Vf   \        V R24      hVe   \        W=4       Ml\        4       pVe   V\        VP                  4      ,          pV	e   V\        V	P                  4      ,          pV'       d   \        V R\	        V4       R24      h\        V VVVV	V
VVVP                  R/ 4      VP                  RR4      VVP                  R	R4      VVR7      # )zKValidate a single field spec and compile it into a `ResponseTemplateField`.ÚopenÚopen_patternÚcloseÚclose_patternr   r   r   r   r   r   r   zField 'rG   z must be a dictz: unknown keys r/   z: unknown content parser 'z'. Available: z: 'join' must be a string, got Fz!: 'join' requires 'repeats': truez%: transform_each must be a bool, got z5: transform_each is set but no transform was providedz5: open_pattern/close_pattern declares named group(s) zê, but the field has no 'transform'. Named captures are only surfaced through a 'transform' template (where they appear alongside 'content'). Either add a 'transform' that uses the captures, or remove the named groups from the pattern.T)r   r   r   r   r   r   r   r   r   r   r   r   r   r   >   r   rz   r|   r   r   r   r   r   r{   r}   r   )rJ   r   r]   rt   rc   rs   r   rm   r
   ra   r   r   r   Ú
groupindexr	   )r   rC   Ú_ALLOWED_FIELD_KEYSrB   Úunknown_field_keysr   r   r   r   r   r   r   r   r   r   Úcaptured_namess   &&              r%   Ú_build_fieldr‚   Œ   s~  € òÐð �d�V˜1Ð€EÜ�eœT×"Ò"Ü˜E˜7 /Ð2Ó3Ð3Ü  ›ZÐ*=Õ=Ð=ÐÖ=Ü˜E˜7 /´&Ð9KÓ2LÐ1MÐNÓOÐOØ�i‰i˜	 6Ó*€GØ”oÔ%Ü˜E˜7Ð"<¸W¸IÀ^ÔTZÔ[jÓTkÐSlÐmÓnÐnÜ6EÀeÐTZÐ\jÓ6kÑ3€GÐ3Ü9HÈÐW^Ð`oÓ9pÑ6€HÐ6Ø�9‰9�VÓ€DØÒ¤
¨4´× 5Ò 5Ü˜E˜7Ð"AÄ$ÀtÃ*×BUÑBUÐAVÐWÓXÐXØÒ §	¡	¨)°U× ;Ò ;Ü˜E˜7Ð"CÐDÓEÐEØ—	‘	˜+Ó&€IØ—Y‘YÐ/°Ó7€NÜ�n¤d×+Ò+Ü˜E˜7Ð"GÌÈ^ÓH\×HeÑHeÐGfÐgÓhÐhß˜)Ò+Ü˜E˜7Ð"WÐXÓYÐYØÒÜ" 5Õ4ô ›ˆØÒØœc '×"4Ñ"4Ó5Õ5ˆNØÒØœc (×"5Ñ"5Ó6Õ6ˆNßÜØ�'ÐNÜ˜.Ó)Ð*ð +<ð=óð ô !ØØØ#Ø 7ØØ%Ø!9ØØ—Y‘Y˜~¨rÓ2Ø—	‘	˜) UÓ+ØØ—‘˜: tÓ,ØØ%ôð r$   c               ó    € V ^8„  d   QhRRRR/# )r.   ro   zdict | ResponseTemplater0   r'   r   )r1   s   "r%   r2   r2   Ô   s   € ÷ ñ Ð!8ð Ð=Mñ r$   c           	     ó<  € \        V \        4      '       d   V # \        V 4       V R ,          P                  4        UUu/ uF  w  rV\	        W4      bK  	  pppVP                  4        UUu. uF  w  rVP
                  e   K  VNK  	  ppp\        V4      ^8”  d   \        RRP                  V4       24      h\        RV RR4      w  rgpVf   \        R4      h\        \        V P                  R/ 4      4      TV'       d
   V^ ,          MRVVR	7      # u uppi u uppi )
r)   NzpAt most one field may omit 'open'/'open_pattern' (that field becomes the implicit-open / leftover sink). Found: z, Úresponse_templater5   r6   zGresponse_template must define 'start_anchor' or 'start_anchor_pattern'.r(   )r(   r)   r+   r*   r,   )rJ   r'   rw   Úitemsr‚   r   rd   r]   r   rm   r   rs   )	ro   r   rh   r)   rC   Úimplicit_fieldsr*   r,   Ú_s	   &        r%   Úload_response_templater‰   Ô   s  € Ü�$Ô(×)Ò)ØˆÜ˜TÔ"à=AÀ(½^×=QÑ=QÔ=SÔTÑ=S±	°ˆd”L Ó+Ò+Ñ=S€FÑTà/5¯|©|¬~ÔW©~¡ ÀÇÁ—t�t©~€OÑWÜ
ˆ?Ó˜aÔÜð6Ø6:·i±iÀÓ6PÐ5QðSó
ð 	
ô
 1@Ø˜T >Ð3Ió1Ñ-€O¨Að ÒÜÐbÓcÐcäÜ�d—h‘h˜z¨2Ó.Ó/Øß'6� Ö#¸DØ'Ø3ôð ùó UùãWs   ¾DÁ+DÂD)r'   r	   r‰   )Ú__doc__Ú
__future__r   Údataclassesr   Útypingr   Úregexr[   Úutilsr   Úcontent_parsersr   r   Ú
get_loggerr   r9   r	   r'   rm   rw   r‚   r‰   Ú__all__r   r$   r%   Ú<module>r“      s�   ðñ Cå "å !Ý ã å ß Hð 
×	Ò	˜HÓ	%€ð ÷ð ó ðð" ÷ð ó ðõ2-õ`Nõ$EõPò: R‚r$   