
    (HJjv                         d dl Z d dlmZmZ d dlZdZ ej                  dez   dz   ej                        Z	de
de
fdZd	ej                  defd
Zdde
dee   fdZdZdZy)    N)AnyOptionalz%<\|"\|>(?:(?!<\|"\|>)[\s\S])*?<\|"\|>z'call:([\w-]+)(\{(?:[^{}<]|<(?!\|\"\|>)|z
|(?2))*\})textreturnc                 
   g fd}t        j                  d|| t         j                        } t        j                  dd|       } t              D ].  \  }}| j	                  d| dt        j                  |            } 0 | S )zConvert Gemma 4 tool call args to valid JSON.

    Gemma 4 uses unquoted keys and <|"|> as string delimiters
    instead of standard double quotes.
    c                 h    j                  | j                  d             dt              dz
   dS )N    )appendgrouplen)mstringss    d/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/mlx_lm/tool_parsers/gemma4.py_capturez&_gemma4_args_to_json.<locals>._capture   s0    qwwqz"c'lQ&'t,,    z<\|"\|>(.*?)<\|"\|>)flagsz(?<=[{,])(\w+):z"\1":r
   )resubDOTALL	enumeratereplacejsondumps)r   r   isr   s       @r   _gemma4_args_to_jsonr      sw     G-
 66((D		JD66$h5D'"1||d1#TNDJJqM: # Kr   matchc                     | j                  d      }| j                  d      }t        |      }t        j                  |      }t	        ||      S )zAParse a single call:name{args} regex match into a tool call dict.r	      )name	arguments)r   r   r   loadsdict)r   	func_nameargs_strjson_strr"   s        r   _parse_singler(   .   sA    AI{{1~H#H-H

8$IY)44r   _c                     t        t        j                  |             }|st        d      t	        |      dk(  rt        |d         S |D cg c]  }t        |       c}S c c}w )NzNo function provided.r	   r   )list_tool_call_regexfinditer
ValueErrorr   r(   )r   r)   matchesr   s       r   parse_tool_callr0   7   s_    #,,T23G011
7|qWQZ((&-.gM!g...s   A!z<|tool_call>z<tool_call|>)N)r   typingr   r   regexr   _GEMMA4_STRcompiler   r,   strr   Matchr$   r(   r0   tool_call_starttool_call_end r   r   <module>r:      s        7 2::.<}LII s s .5 5d 5/# /(3- / !r   