+
    UV-jÔ  ã                   óx   € ^ RI t ^ RItRtRtRtR tR tRR ltR t	R	 t
R
 t]P                  ! R4      tRR ltR# )é    Nz<|tool_call>z<tool_call|>z<|"|>c                óœ  € ^ pTpV\        V 4      8  d¯   WR P                  \        4      '       dU   V P                  \        V\        \        4      ,           4      pVR8X  d   \        V 4      # V\        \        4      ,           pK�  W,          pVR9   d   V^,          pMVR9   d   V^,          pV^ 8X  d   V# V^,          pK¾  \        V 4      # )zFind the index of the closing '}' that matches the '{' at *start*,
respecting nested braces/brackets and <|"|>-escaped strings.Nú{[ú}]éÿÿÿÿ©ÚlenÚ
startswithÚ_ESCAPEÚfind)ÚtextÚstartÚdepthÚiÚend_idxÚchs   &&    Úl/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/tool_parsers/gemma4.pyÚ_find_matching_bracer      s¯   € ð €EØ€AØ
Œc�$‹iŒ-Ø�ˆ8×Ñœw×'Ò'à—i‘i¤¨¬S´«\Õ)9Ó:ˆGØ˜"Œ}Ü˜4“yÐ Øœ#œg›,Õ&ˆAÙØ�WˆØ�Œ:Ø�Q�J‰EØ�4ŒZØ�Q�JˆEØ˜ŒzØ�Ø	ˆQ�ŠÜˆt‹9Ðó    c                óú  € V P                  4       p V P                  \        4      '       d6   V \        \        4      R pVP	                  \        4      pVR8X  d   V# VRV # V P                  R4      '       d   \        V ^ 4      p\        V ^V 4      # V P                  R4      '       d   \        V ^ 4      p\        V ^V 4      #  \        P                  ! V 4      #   \        P                  \        3 d    T u # i ; i)zñParse a single value from gemma tool-call syntax.

Handles:
- <|"|>...<|"|> escaped strings  -> str
- {...}  nested objects           -> dict
- [...]  arrays                   -> list
- bare literals (numbers, booleans, null) via json.loads
NÚ{Ú[r   )Ústripr	   r
   r   r   r   Ú_parse_objectÚ_parse_arrayÚjsonÚloadsÚJSONDecodeErrorÚ
ValueError)r   ÚinnerÚendÚcloses   &   r   Ú_parse_valuer"   #   så   € ð �:‰:‹<€Dð ‡�”w×ÒØ”Sœ“\�^Ð$ˆØ�j‰jœÓ!ˆØ�"Œ9ØˆLØ�T�cˆ{Ðð ‡��s×ÒÜ$ T¨1Ó-ˆÜ˜T ! E˜]Ó+Ð+ð ‡��s×ÒÜ$ T¨1Ó-ˆÜ˜D  5˜MÓ*Ð*ðÜ�zŠz˜$ÓÐøÜ× Ñ ¤*Ð-ô ØŠðús   ÃC ÃC:Ã9C:c                ó,  € . p^ p^ p^ pV\        V 4      8  dÑ   WR P                  \        4      '       dV   V P                  \        V\        \        4      ,           4      pVR8X  d   \        V 4      pMV\        \        4      ,           pK‚  W,          pVR9   d   V^,          pM:VR9   d   V^,          pM)Wq8X  d$   V^ 8X  d   VP	                  WV 4       V^,           pV^,          pKà  WR pVP                  4       '       d   VP	                  V4       V# )zZSplit *text* on *delimiter* only when not inside braces/brackets or
<|"|>-escaped strings.Nr   r   r   )r   r	   r
   r   Úappendr   )	r   Ú	delimiterÚpartsr   Úcurrent_startr   r   r   Útails	   &&       r   Ú_split_top_levelr)   G   sí   € ð €EØ€EØ€MØ	€AØ
Œc�$‹iŒ-Ø�ˆ8×Ñœw×'Ò'Ø—i‘i¤¨¬S´«\Õ)9Ó:ˆGØ˜"Œ}Ü˜“I‘àœc¤'›lÕ*�ÙØ�WˆØ�Œ:Ø�Q�J‰EØ�4ŒZØ�Q�J‰EØŒ_ ¨!¤Ø�L‰L˜¨AÐ.Ô/Ø �EˆMØ	ˆQ�ŠØ�Ð€DØ‡z�z‡|‚|Ø�‰�TÔØ€Lr   c                óæ   € / p\        V R4      pV F\  pVP                  4       pV'       g   K  \        V4      pVR8X  d   K1  VRV P                  4       pW4^,           R p\        V4      W&   K^  	  V# )z4Parse the interior of a ``{...}`` block into a dict.Ú,Nr   )r)   r   Ú_find_top_level_colonr"   )r   ÚresultÚentriesÚentryÚcolonÚkeyÚ	value_strs   &      r   r   r   e   sw   € à€FÜ˜t SÓ)€GÛˆØ—‘“ˆßÙä% eÓ,ˆØ�BŒ;ÙØ�F�Uˆm×!Ñ!Ó#ˆØ !�)˜+Ð&ˆ	Ü" 9Ó-ˆ‹ñ ð €Mr   c                ó.  € ^ pV\        V 4      8  dƒ   WR P                  \        4      '       dL   V P                  \        V\        \        4      ,           4      pVR8X  d   R# V\        \        4      ,           pKx  W,          R8X  d   V# V^,          pK’  R# )z@Return the index of the first ':' not inside an escape sequence.NÚ:r   r   )r   r   r   s   &  r   r,   r,   w   sy   € à	€AØ
Œc�$‹iŒ-Ø�ˆ8×Ñœw×'Ò'Ø—i‘i¤¨¬S´«\Õ)9Ó:ˆGØ˜"Œ}Ø�	Øœ#œg›,Õ&ˆAÙØ�7�cŒ>ØˆHØ	ˆQ�ŠØ€Ir   c                óˆ   € \        V R4      pV Uu. uF%  q"P                  4       '       g   K  \        V4      NK'  	  up# u upi )z4Parse the interior of a ``[...]`` block into a list.r+   )r)   r   r"   )r   ÚitemsÚitems   &  r   r   r   ‡   s4   € ä˜T 3Ó'€EÙ+0ÓA©5 4·J±J·LÔŒL˜Ö©5ÑAÐAùÒAs   ‘?­?z7call:([\w-]+)(\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})c                 óâ  € \         P                  V 4      pV'       gj   \        P                  ! R V 4      pV'       g   \        R4      hVP	                  ^4      pVP                  4       ^,
          p\        W4      pW^,           V pM'VP	                  ^4      pVP	                  ^4      pV^R p\        V4      p	\        V	\        4      '       d   \        P                  ! V	4      p	\        WIR7      # )zcall:([\w-]+)\{z)No function call found in tool call text.)ÚnameÚ	argumentsr   )Ú_tool_call_regexÚsearchÚrer   Úgroupr    r   r   Ú
isinstanceÚdictr   Údumps)
r   ÚtoolsÚmatchÚmÚ	func_nameÚbrace_startÚ	brace_endÚargs_strÚbalancedr:   s
   &&        r   Úparse_tool_callrJ   –   s¾   € ä×#Ñ# DÓ)€Eßä�IŠIÐ(¨$Ó/ˆßÜÐHÓIÐIØ—G‘G˜A“Jˆ	Ø—e‘e“g •kˆÜ(¨Ó;ˆ	Ø a�¨)Ð4‰à—K‘K “Nˆ	à—;‘;˜q“>ˆØ˜A˜b�>ˆä˜hÓ'€Iä�)œT×"Ò"Ü—J’J˜yÓ)ˆ	Ü�YÔ4Ð4r   )r+   )N)r   Úregexr=   Útool_call_startÚtool_call_endr
   r   r"   r)   r   r,   r   Úcompiler;   rJ   © r   r   Ú<module>rP      sS   ðÛ ã à €Ø€à
€òò0!ôHò<ò$ò Bð —:’:Ø>óÐ ö
5r   