
    ~hu                         U d dl mZ d dlmZmZmZmZmZmZm	Z	 d dl
mZmZmZ d dlZeeeeeedZeeef   ed<   eeeeeedZd Z	 ddeeef   d	ed
ee   fdZy)    )deepcopy)AnyDict
ForwardRefListOptionalTypeUnion)	BaseModelFieldcreate_modelN)stringnumberintegerbooleanobjectarrayjson_type_mappingc                 n    | j                  di       fd |       } | j                  dd        | S )N$defsc                    t        | t              r}d| v rO| d   }t        j                  d|      }|r2|j	                  d      } t        j                  |i                   S | j                         D ci c]  \  }}| |       c}}S t        | t              r| D cg c]
  } |       c}S | S c c}}w c c}w )N$refz#/\$defs/(\w+)   )	
isinstancedictrematchgroupr   getitemslist)	objref_pathr   def_keykvi_resolvedefss	          S/opt/mcp/mcp-sentiment/venv/lib/python3.12/site-packages/mcpadapt/utils/modeling.pyr(   z.resolve_refs_and_remove_defs.<locals>._resolve   s    c4 }v;!2H=#kk!nG#HTXXgr-B$CDD/2yy{;tq!Ax{N;;T"),-AHQK--J	 <-s   8B7#B=)r   pop)json_objr(   r)   s    @@r*   resolve_refs_and_remove_defsr-      s9    <<$D !H LL$O    schema
model_namereturnc                 &    i i dt         dt        t         t        f   dt        t           ffddt         dt        t         t        f   dt
        f fdd	 v r$ d	   j                         D ]  \  }} ||         |       }|S )
z6Create a Pydantic model from a JSON schema definition.name
schema_defr1   c                 :   | 
v r
|    S | vrt        |       | <   i }|j                  di       }t        |j                  dg             }|j                         D ]  \  }} |||      \  }}|t	        ||j                  dd      |j                  dd      |j                  dd      |j                  dg       |j                  d	d      |j                  di       
      f||<    t        |j                  d|       fd|j                  dd      i|}	|	
| <   |	S )z/Process a schema definition and create a model.
propertiesrequireddescription titler    NanyOfenum)defaultr8   r:   r    r;   r<   r6   __doc__)r   r   setr    r   r   )r3   r4   fieldsr6   r7   
field_namefield_schema
field_typer=   modelcreated_modelsforward_refsget_field_types             r*   process_schemaz5create_model_from_json_schema.<locals>.process_schema<   sM   >!!$'' |#!+D!1L ^^L"5
z~~j"56(2(8(8(: 	$J"0\8"TJ# , 0 0 C&**7B7&**7D9&**7B7%))&$7+//bA"F:	  NN7D)
NN="5
 
  %tr.   rA   rB   r7   c                    d|v rm|d   j                  d      j                  d      }|d   }|vr$}|D ]  }|j                  |i       }  ||       |   }| |v }|s	t        |   n||sdfS dfS d|v r3t	        d |d   D              }	g }
|d   D ]  }d	|v r5|d	   d
k7  r-|
j                  t        j                  |d	   t                     <d|v r|
j                  t               Vd|v s[|d   j                  d      j                  d      }|d   }|vr$}|D ]  }|j                  |i       }  ||       |
j                  |           t        |
      dk(  r|
d   nt        t        |
         }|j                  d      }| |v xr |du }|	r|s	t        |   }||rdfS |fS |j                  d	      dk(  r&d|v r" d|d   t                     \  }}t        |   }n|j                  d	d      }t        |t              rig }
|D ]3  }|d
k7  s	t        j                  |t              }|
j                  |       5 t        |
      dkD  rt        t        |
         }n(|
r|
d   nt        }nt        j                  |t              }|j                  d      }| |v xr |du }|st        |   }||nd}||fS d}||fS )z'Determine field type and default value.r   z#//N.r;   c              3   D   K   | ]  }|j                  d       dk(    yw)typenullN)r   ).0opts     r*   	<genexpr>zHcreate_model_from_json_schema.<locals>.get_field_type.<locals>.<genexpr>z   s"      .16)s    rM   rN   r<   r   r   r=   r   r    itemr   )lstripsplitr   r   anyappendr   r   strlenr
   tupler?   r   r   r!   )rA   rB   r7   	ref_partsref_name
ref_schemapartrC   is_requiredis_nullabletypesoptionr=   	item_type_	json_typetmapped_typerE   rG   rH   r/   s                     r*   rG   z5create_model_from_json_schema.<locals>.get_field_typec   s@    \!$V,33D9??DI }H ~-#
% :D!+b!9J:x4'1J$0K,7$Z' -0  l" 5A'5J K E&w/ ;V#v&(@LL!2!6!6vf~s!KLv%LL%v% &v 5 5d ; A A# FI(}H~5%+
$- BD)3b)AJB&x<LL!9:;" &)Z1_q%e:MJ"&&y1G$0DW_K;%j1
ks>>w>> F#w.7l3J)&,w2GOLIqiJ %((:I )T*" 2AF{&7&;&;As&C[12
 u:>!&uU|!4J-2qJ /229cB
 ""9- H,@D!*-J!(!4g$G 7"" G7""r.   r   )rW   r   r   r	   r   r?   r    )	r/   r0   def_name
def_schema
root_modelrE   rF   rG   rH   s	   `    @@@@r*   create_model_from_json_schemarj   4   s    
 24N*,L%S %d38n %i %NY#3 Y#d38n Y#PS Y# Y#x &$*7O$9$9$; 	1 Hj8Z0	1  
F3Jr.   )DynamicModel)copyr   typingr   r   r   r   r   r	   r
   pydanticr   r   r   r   rW   floatintboolr   r!   r   __annotations__r-   rj    r.   r*   <module>rt      s     E E E 3 3 	 & 4T	?   8 /=RcNR(+R	)_Rr.   