+
    TV-jv  ã                   ó°   € ^ RI t ^ RIHtHt ^ RItRt]P                  ! R],           R,           ]P                  4      t	R R lt
R R	 ltRR
 R lltRtRtR# )é    N)ÚAnyÚOptionalz%<\|"\|>(?:(?!<\|"\|>)[\s\S])*?<\|"\|>z'call:([\w-]+)(\{(?:[^{}<]|<(?!\|\"\|>)|z
|(?2))*\})c                ó0   € V ^8„  d   QhR\         R\         /# )é   ÚtextÚreturn)Ústr)Úformats   "Úk/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_lm/tool_parsers/gemma4.pyÚ__annotate__r      s   € ÷ ñ œsð ¤sñ ó    c                ó  a€ . oV3R lp\         P                  ! RW\         P                  R7      p \         P                  ! RRV 4      p \        S4       F/  w  r#V P	                  RV R2\
        P                  ! V4      4      p K1  	  V # )zŒConvert Gemma 4 tool call args to valid JSON.

Gemma 4 uses unquoted keys and <|"|> as string delimiters
instead of standard double quotes.
c                 óp   <€ SP                  V P                  ^4      4       R\        S4      ^,
           R2# )é   Ú )ÚappendÚgroupÚlen)ÚmÚstringss   &€r   Ú_captureÚ&_gemma4_args_to_json.<locals>._capture   s0   ø€ Ø�‰�q—w‘w˜q“zÔ"Ø”c˜'“l QÕ&Ð' tÐ,Ð,r   z<\|"\|>(.*?)<\|"\|>)Úflagsz(?<=[{,])(\w+):z"\1":r   )ÚreÚsubÚDOTALLÚ	enumerateÚreplaceÚjsonÚdumps)r   r   ÚiÚsr   s   &   @r   Ú_gemma4_args_to_jsonr#      ss   ø€ ð €Gõ-ô
 �6Š6Ð(¨(ÄÇ	Á	ÔJ€Dä�6Š6Ð$ h°Ó5€Dä˜'Ö"‰ˆØ�|‰|˜d 1 # T˜N¬D¯JªJ°q«MÓ:Šñ #ð €Kr   c                óD   € V ^8„  d   QhR\         P                  R\        /# )r   Úmatchr   )r   ÚMatchÚdict)r
   s   "r   r   r   .   s   € ÷ 5ñ 5œŸ™ð 5¤dñ 5r   c                ó    € V P                  ^4      pV P                  ^4      p\        V4      p\        P                  ! V4      p\	        WR7      # )zAParse a single call:name{args} regex match into a tool call dict.)ÚnameÚ	arguments)r   r#   r   Úloadsr'   )r%   Ú	func_nameÚargs_strÚjson_strr*   s   &    r   Ú_parse_singler/   .   s?   € à—‘˜A“€IØ�{‰{˜1‹~€HÜ# HÓ-€HÜ—
’
˜8Ó$€IÜ�YÔ4Ð4r   c                óF   € V ^8„  d   QhR\         R\        \        ,          /# )r   r   Ú_)r	   r   r   )r
   s   "r   r   r   7   s   € ÷ /ñ /œ#ð /¤(¬3¥-ñ /r   c                 óè   € \        \        P                  V 4      4      pV'       g   \        R 4      h\	        V4      ^8X  d   \        V^ ,          4      # V Uu. uF  p\        V4      NK  	  up# u upi )zNo function provided.)ÚlistÚ_tool_call_regexÚfinditerÚ
ValueErrorr   r/   )r   r1   Úmatchesr   s   &&  r   Úparse_tool_callr8   7   s_   € ÜÔ#×,Ñ,¨TÓ2Ó3€GßÜÐ0Ó1Ð1Ü
ˆ7ƒ|�qÔÜ˜W Q�ZÓ(Ð(Ù&-Ó.¡g ŒM˜!Ö¡gÑ.Ð.ùÒ.s   ÁA/z<|tool_call>z<tool_call|>)N)r   Útypingr   r   Úregexr   Ú_GEMMA4_STRÚcompiler   r4   r#   r/   r8   Útool_call_startÚtool_call_end© r   r   Ú<module>r@      sW   ðó ß  ã ð 7€ð —:’:Ø.°Õ<¸}ÕLØ‡I�IóÐ õõ.5÷/ð !€Ø‚r   