
    (HJj                        d Z ddlZddlZddlZddlmZ ddlZ ej                  dej                        Z
 ej                  dej                        ZdZdZded	ee   dz  d
ee   fdZded
efdZ	 ddedeeef   d	ee   dz  dee   dz  d
eeef   f
dZded	ee   dz  fdZ	 ddeded	ee   dz  dee   dz  d
eeef   dz  f
dZded	ee   dz  fdZdded	ee   dz  fdZy)zi
Modified from:
https://github.com/vllm-project/vllm/blob/main/vllm/tool_parsers/glm4_moe_tool_parser.py
    N)Anyz^(.*?)<arg_key>z?<arg_key>(.*?)</arg_key>(?:\\n|\s)*<arg_value>(.*?)</arg_value>z<tool_call>z</tool_call>	tool_nametoolsreturnc                 \   |
t               S |D ]  }|j                  d      }|r|j                  d      | k7  r+|j                  d      xs i }|j                  d      xs i }|j                         D ch c]  \  }}|j                  d      dk(  r| c}}c S  t               S c c}}w )Nfunctionname
parameters
propertiestypestring)setgetitems)r   r   toolfuncparamsr   r	   schemas           c/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/mlx_lm/tool_parsers/glm47.py_get_string_arg_namesr      s    }uxx
#txx'94,'-2ZZ-3
 !+ 0 0 2
 2fzz&!X-  2
 	
  5L
s   7 B(valuec                     	 t        j                  |       S # t        $ r Y nw xY w	 t        j                  |       S # t        $ r Y | S w xY wN)jsonloads	Exceptionastliteral_eval)r   s    r   _deserializer   *   sU    zz%   && Ls    	##< 	A	A		func_name	argumentsstring_argsc                     |t        | |      }i }|j                         D ]N  \  }}||v r!t        |t              r|n
t        |      ||<   +t        |t              rt	        |      ||<   J|||<   P |S r   )r   r   
isinstancestrr   )r    r!   r   r"   
normalizedkeyr   s          r   _normalize_argumentsr(   8   s|     +Iu=Joo'
U+'1%'=e3u:JsOeS!*51JsO#JsO (     textc           	         	 t        j                  | j                               }t	        |t
              r|rt	        |d   t              r|d   }t	        |t              sy d }d }d|v r'd|v r#|j                  d      }|j                  d      }nud|v r'd|v r#|j                  d      }|j                  d      }nJd|v rFt	        |j                  d      t              r'|d   }|j                  d      }|j                  d      }t	        |t              r&|xs |j                  d      }|j                  d      }t	        |t              rt        |      }t	        |t              rt        ||      nd }t	        |t              r|t        |i       S t	        |t              r*t	        |t              rt        |t        ||||            S y # t        $ r Y y w xY w)Nr   r	   r!   r   r   r	   r!   r"   )r   r   stripr   r$   listdictr   r%   r   r   r(   )r*   r   parsedr	   r!   r   r"   s          r   _parse_json_tool_callr2   N   s   DJJL) &$FfQi&AYFfd# DIK61zz&!JJ{+		v	+"7zz*%JJ{+		6	jF);TBf~xxHH[)	$6+!6	xx)S! +	8B48M'e4SWK$!2,,$It!<*iK
 	
 U  s   #G 	GGc                    d| vry 	 t        j                  |       }|sy |t        ||      }i }|D ]I  }d|vr y |j                  dd      \  }}|j	                         }|s y ||v r|||<   <t        |      ||<   K |S # t        $ r Y y w xY w)N=   )shlexsplit
ValueErrorr   r.   r   )	r*   r    r   r"   tokensr!   tokenr'   r   s	            r   _parse_key_value_pairsr;      s     $T" +Iu=Ie[[a(
Uiik+"IcN)%0IcN  +  s   A? ?	B
Bc           	      n   | j                         }|sy d|v rz|j                  dd      \  }}|j                         }|j                         }|rC|rAt        ||      }t        |      }t	        |t
              rt        |t        ||||            S |j                  d      \  }}}|sy |j                         }|st        |i       S t        ||      }t        |      }t	        |t
              rt        |t        ||||            S t        ||||      }	|	t        ||	      S t        |d|i      S )N
r5   r-   r,    raw)	r.   r7   r   r   r$   r0   r(   	partitionr;   )
r*   r   stripped
first_linerestr	   r"   r!   _kv_argumentss
             r   _parse_plain_text_tool_callrF      sA   zz|H x#>>$2
D!zz|D/e<K$T*I)T*2iK  &&s+MD!T::<D,,'e4KT"I)T"*iK
 	
 *$eUL66TeT]33r)   c                    t         j                  |       }|s=t        | |      }||S t        | |      }||S t	        dd| j                         i      S |j                  d      }t        ||      }i }t        j                  |       D ]T  }|j                  d      j                         }|j                  d      j                         }||vrt        |      }|||<   V t	        ||      S )z@Parse a GLM 4.7 tool call string into a name and arguments dict.unknownr?   r,   r5      )_func_name_regexsearchr2   rF   r0   r.   groupr   _func_arg_regexfinditerr   )	r*   r   matchfallbackr    r"   arg_dctarg_keyarg_vals	            r   parse_tool_callrT      s    ##D)E(u5O.tU;Oudjjl.CDDAI'	59KG ))$/++a.&&(++a.&&(+%"7+G" 0 Y'22r)   r   )__doc__r   r   r6   typingr   regexrecompileDOTALLrJ   rM   tool_call_starttool_call_endr%   r/   r   r   r   r0   r(   r2   r;   rF   rT    r)   r   <module>r^      s  
     2::0"))< "**FII
  S cT1A c#h "
 
 
$ $(	CH~ 9t SD	
 
#s(^,- -DI,< -j $(	
 9t SD	
 
#s(^dF+4c +4$s)d2B +4\3# 3d3i$&6 3r)   