
    6i,                    *   U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZmZ d d	lmZ d d
l m!Z! d dl"m#Z#m$Z$ d dl%m&Z&m'Z'  ede      Z(ejR                  dk\  reejT                  fZ+nefZ+ e,       Z-de.d<    G d d      Z/ G d d      Z0d Z1d Z2	 	 	 	 	 	 	 	 	 	 	 	 d dZ3	 	 	 	 	 	 	 	 	 	 	 	 	 	 d!dZ4	 d"	 	 	 	 	 d#dZ5	 	 	 	 d$dZ6 G d dee(         Z7 G d dee(         Z8y)%    )annotationsN)AsyncGenerator	GeneratorIterable)deepcopy)cache)	AnyGenericListNoReturnOptionalTypeVarUnionget_args
get_origin)	from_json)	BaseModelcreate_model)	FieldInfo)Mode)extract_json_from_streamextract_json_from_stream_async)JsonCompletenessis_json_completeT_Model)bound)   
   z	set[type]_processing_modelsc                      e Zd Zy)MakeFieldsOptionalN)__name__
__module____qualname__     a/root/.openclaw/workspace/visionaryfx/venv/lib/python3.12/site-packages/instructor/dsl/partial.pyr!   r!   4   s    r&   r!   c                  $     e Zd ZdZd fdZ xZS )PartialLiteralMixinab  DEPRECATED: This mixin is no longer necessary.

    With completeness-based validation, Literal and Enum types are handled
    automatically during streaming:
    - Incomplete JSON: no validation runs, partial values are stored as-is
    - Complete JSON: full validation against original model

    You can safely remove this mixin from your models.
    c                \    t        |   di | t        j                  dt        d       y )NzPartialLiteralMixin is deprecated and no longer necessary. Completeness-based validation now handles Literal and Enum types automatically during streaming. You can safely remove this mixin.   )
stacklevelr%   )super__init_subclass__warningswarnDeprecationWarning)clskwargs	__class__s     r'   r.   z%PartialLiteralMixin.__init_subclass__C   s-    !+F+P 	
r&   )r3   r	   returnNone)r"   r#   r$   __doc__r.   __classcell__)r4   s   @r'   r)   r)   8   s    
 
r&   r)   c                0    t        j                  dd|       S )Nz[\x00-\x1F\x7F-\x9F] )resub)ss    r'   remove_control_charsr>   N   s    66)2q11r&   c                f   | j                         xs d}t        |j                         |      }t               }|j	                  |       t        |dd      }|j                         }t        |t              rt        |      nd}	|r|	r| |j                  |fi |S ||n|}
t        ||
|dfi |S )a2  Process a potential JSON object using completeness-based validation.

    - If JSON is complete (closed braces/brackets): validate against original model
    - If JSON is incomplete: build partial object using model_construct (no validation)

    Note: Pydantic v2.10+ has `experimental_allow_partial` but it doesn't support
    BaseModel constraints during partial validation (only TypedDict). If Pydantic
    adds BaseModel support in the future, this could potentially be simplified.
    See: https://docs.pydantic.dev/latest/concepts/partial_validation/
    {})partial_mode_original_modelNTr:   )stripr   encoder   analyzegetattris_root_complete
isinstancedictboolmodel_validate_build_partial_object)potential_objectrA   partial_modelr3   json_strparsedtrackeroriginal_modelroot_completehas_datamodel_for_constructs              r'   process_potential_objectrV   R   s      %%'/4Hx(|DF GOOH ],=tDN ,,.M)&$7tF|THn&@,~,,V>v>> -8Nm 	 %V-@'2XQWXXr&   c                P   | yt        | t              s| S i }| D ]  }| |   }|r| d| n|}|d||<   |j                  |      }	|j                  j	                  |      }
|
r|
j
                  nd}|	r9|7t        |t              r't        |t              r |j                  |fi |||<   t        |t              rAd}|"t        |t              rt        |t              r|}|rt        ||||fi |||<   |||<   t        |t              rt        |||||fi |||<   	|||<    |j                  j                         D ]N  \  }}
||vs|
j
                  }t        |t              r#t        |t              rt        i ||dfi |||<   Jd||<   P  |j                  di |S )zBuild a partial object using model_construct() to skip validation.

    For each field:
    - If the field's JSON is complete AND it's a nested BaseModel: validate it
    - Otherwise: store without validation
    N.r:   r%   )rH   rI   is_path_completemodel_fieldsget
annotationtype
issubclassr   rK   rL   list_build_partial_listitemsmodel_construct)datamodelrQ   pathr3   result
field_namefield_value
field_pathfield_complete
field_info
field_typenested_models                r'   rL   rL   u   s    |dD!F "-
:&/3vQzl+
!%F: 11*=''++J7
.8Z**d
j4*d+
:y0Q%>Z%>%>{%Uf%Uz"k4(L%*Z*Fj)4#-L%:w
&FL&z" &1z"T*!4UJ"GM"F: "-F:E"-J #("4"4":":"< *
JV##..J*d+
:y0Q%:
GR&39&z" &*z"* !5  *6**r&   c                   g }d}|rR|j                   j                  |      }|r5|j                  }	t        |	      t        t
        fv rt        |	      }
|
r|
d   }t        |       D ]  \  }}| d| d}|j                  |      }|rU|rSt        |t              rCt        |t              r3t        |t              r#|j                   |j                  |fi |       v|j                  |        |S )z0Build a partial list, validating complete items.Nr   [])rZ   r[   r\   r   r_   r   r   	enumeraterY   rH   r]   r^   r   rI   appendrK   )ra   rR   rg   rQ   re   r3   rf   	item_typerk   rl   argsiitem	item_pathitem_completes                  r'   r`   r`      s     FI#0044Z@
#..J*%$5
+ $QIU# 	4fAaSN	00;Y:i+F)Y/JtT4J6i66tFvFGd	 Mr&   c                   t        |       }|5t        |       }t        fd|D              }|t        v r	t        |   S ||   S t        | t              r`t        | t              rP| t        v r| S t        j                  |        	 rt        | t        f   nt        |    	 t        j                  |        S | S # t        j                  |        w xY w)Nc              3  8   K   | ]  }t        |         yw)make_fields_optionalN_process_generic_arg).0tr|   s     r'   	<genexpr>z'_process_generic_arg.<locals>.<genexpr>   s+      %

 	 !%9 %
s   )r   r   tupleUNION_ORIGINSr   rH   r]   r^   r   r   addPartialr!   discard)argr|   
arg_originnested_argsmodified_nested_argss    `   r'   r~   r~      s     CJsm$ %

 !%
  
 &-...//c4 ZY%?((
""3'0 , C!334  #**3/J #**3/s   B6 6Cc                   t        |       }| j                  }t        |      Lt        |      }t        |      }t	        d |D              }|rt
        ||      nd |_        d |_        d |_        npt        |t              r:t        |t              r*t
        t        |t        f      |_        i |_        d |_        n&t
        | j                     |_        d |_        d |_        |j                  |fS )Nc              3  6   K   | ]  }t        |d         yw)Tr{   Nr}   r   r   s     r'   r   z'_make_field_optional.<locals>.<genexpr>  s       
EH 4@@
s   )r   r\   r   r   r   r   defaultdefault_factoryrH   r]   r^   r   r   r!   field	tmp_fieldr\   generic_basegeneric_argsmodified_argss         r'   _make_field_optionalr     s     I!!J *)!*-
+ 
LX
 
 6BH\-01t 	 !	$(	! 
J	%*Z*K'
<N0N(OP		$(	!'(8(89	 	$(	!**r&   c                      e Zd Zeedd              Ze	 	 	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 dd       Z	e	 	 	 	 	 	 dd       Z
e	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 dd	       Zy
)PartialBasec                   t        | t              sJ | j                   d       | j                  j                  d      r| j                  nd| j                   }t	        |f| | j
                  d| j                  j                         D ci c]  \  }}|t        |       c}}}t        | d|       }||_
        |S c c}}w )aY  Return a partial model for holding incomplete streaming data.

        With completeness-based validation, we use model_construct() to build
        partial objects without validation. This method creates a model with
        all fields optional and stores a reference to the original model
        for validation when JSON is complete.
        z  must be a subclass of BaseModelr   __base__r#   rB   )r^   r   r"   
startswithr   r#   rZ   ra   r   rF   rB   )r2   
model_namerg   rk   rN   originals         r'   get_partial_modelzPartialBase.get_partial_model,  s     #y) 	
||n<=	
) ||&&y1 LL3<<.) 	 %
~~
 /2.>.>.D.D.F*J
 0<<	
 3 137(0%s   B?c              +  &  K   | j                  ||      }|t        j                  t        j                  hv rt	        |      }|t        j
                  k(  r | j                  |fi |E d {    y  | j                  |fi |E d {    y 7 !7 wN)extract_jsonr   MD_JSONGEMINI_TOOLSr   WRITER_TOOLSwriter_model_from_chunksmodel_from_chunks)r2   
completionmoder3   json_chunkss        r'   from_streaming_responsez#PartialBase.from_streaming_responseQ  s      &&z48DLL$"3"3442;?K4$$$3s33KJ6JJJ,s,,[CFCCC KCs$   A)B+B,BBBBc               (  K   | j                  ||      }|t        j                  k(  rt        |      }|t        j                  k(  r" | j
                  |fi |2 3 d {   }|  | j                  |fi |2 3 d {   }| 7 ,6 y 7 6 y wr   )extract_json_asyncr   r   r   r   writer_model_from_chunks_asyncmodel_from_chunks_async)r2   r   r   r3   r   rv   s         r'   from_streaming_response_asyncz)PartialBase.from_streaming_response_async_  s      ,,Z>4<<8EK4$$$@c@@WPVW  d
9c99+PP  d
	WPsN   ABBB
B!B;B?B BB
BBBBc              +    K   d}| j                         }d}d }|D ]W  }t        |      t        |      kD  r%|j                  d      r|j                  d      r|}n||z  }t	        |||fi |}|}| Y |Rt        | dd       }	|	Bt        |j                         xs d      r$ |	j                  |j                  d      fi | y y y y w	Nr:   trailing-strings{}rB   r@   Texclude_none
r   lenr   endswithrV   rF   r   rC   rK   
model_dump
r2   r   r3   rM   rN   rA   	final_objchunkobjrR   s
             r'   r   z$PartialBase.writer_model_from_chunkso  s     --/ *	  	E E
S!122$$S)NN3'#(  E) * ,AGC II	$  $S*;TBN)#$4$:$:$<$DE1N11!,,$,?CI F * !s   CC
c                 K   d}| j                         }d}d }|2 3 d {   }t        |      t        |      kD  r%|j                  d      r|j                  d      r|}n||z  }t	        |||fi |}|}| `7 [6 |Rt        | dd       }	|	Bt        |j                         xs d      r$ |	j                  |j                  d      fi | y y y y wr   r   r   s
             r'   r   z*PartialBase.writer_model_from_chunks_async  s     --/ *	& 	 	% E
S!122$$S)NN3'#(  E) * ,AGC II	;$  $S*;TBN)#$4$:$:$<$DE1N11!,,$,?CI F * !s'   CA=A;A=AC;A==ACc              +    K   d}| j                         }d}d }|D ]C  }|t        |t              s	 t        |      }|t	        |      z  }t        |||fi |}|}| E |Rt        | dd       }	|	Bt        |j                         xs d      r$ |	j                  |j                  d      fi | y y y y # t        $ r Y w xY wwNr:   r   rB   r@   Tr   r   rH   str	Exceptionr>   rV   rF   r   rC   rK   r   r   s
             r'   r   zPartialBase.model_from_chunks  s     --/ *	  	E}eS)JE  4U ;;* ,AGC II	"  $S*;TBN)#$4$:$:$<$DE1N11!,,$,?CI F * ! ! s(   /CB6A9C6	C?CCCc                 K   d}| j                         }d}d }|2 3 d {   }|t        |t              s	 t        |      }|t	        |      z  }t        |||fi |}|}| L7 G# t        $ r Y Yw xY w6 |Rt        | dd       }	|	Bt        |j                         xs d      r$ |	j                  |j                  d      fi | y y y y wr   r   r   s
             r'   r   z#PartialBase.model_from_chunks_async  s     --/ *	& 	 	%}eS)JE  4U ;;* ,AGC II	 !  '"  $S*;TBN)#$4$:$:$<$DE1N11!,,$,?CI F * !sC   CA8A'A8CA)$C'A8)	A52C4A55ACc           	   #  P  K   d}| D ]@  }	 |t         j                  t         j                  hv r9t        |dd      }|dk(  rYt        |dd      x}r|sAt	        d |j                  d      |j                  d      fD        d	
      }|d	k(  rd}||d }| n|dk(  rt        |dd      }t        |dd      xs t        |dd      }|rI|sAt	        d |j                  d      |j                  d      fD        d	
      }|d	k(  rd}||d }| nUt        |dd      x}rE|sBt	        d |j                  d      |j                  d      fD        d	
      }|d	k(  rYd}||d }| n|dk(  rt        |dd      }	|	rlt        j                  |	d   j                        }|sBt	        d |j                  d      |j                  d      fD        d	
      }|d	k(  rd}||d }| n{t        |dd      x}rk|sBt	        d |j                  d      |j                  d      fD        d	
      }|d	k(  r3d}||d }| n!t        |dd      }
|
dk(  rt        |dd      }t        |dd      }t        |dd      }t        |dd      x}r|sBt	        d |j                  d      |j                  d      fD        d	
      }|d	k(  rd}||d }| n|
dk(  rt        |dd      }t        |dd      }t        |dd      }	t        |	dd      }t        |dd      x}rH|sBt	        d |j                  d      |j                  d      fD        d	
      }|d	k(  rVd}||d }| |t         j                  k(  r/|j                  j                  d   j                  j                   |t         j                  k(  ru|j                  j                  d   j                  j                  s|j                  j                  d   j                  j                  d   j                   j"                   |t         j$                  k(  r|j                  j&                  x}r| |t         j(                  k(  r|j                  j*                   |t         j,                  k(  r2|j.                  d   j                  j0                  d   j&                   |t         j2                  k(  rOt        j                  |j.                  d   j                  j0                  d   j4                  j6                         |t         j8                  k(  r	 |j&                   |t         j>                  k(  rQ|j.                  d   j                  j0                  d   j4                  j6                  }t        j                  |       |t         j@                  k(  r	 |j&                   |t         jB                  k(  rk|j.                  d   j                  j0                  d   j4                  }tE        |      jG                  |      }d!|v rt        j                  |d!          n|t         jH                  t         jJ                  hv r#dd"l&m'} tQ        ||      r|j                   n|j                  r|t         jR                  k(  rJt        jT                          |j                  d   j                  j4                  j"                  x}rF| n@|t         jV                  t         jX                  t         jZ                  t         j\                  t         j^                  t         j`                  t         jb                  hv r*|j                  d   j                  j                  x}r| n|t         jd                  t         jf                  t         jh                  t         jj                  hv rZ|j                  d   j                  j                  x}rD|d   j                   j"                  r+|d   j                   j"                   ntm        d#| d$      C y# t:        $ r}d t=        |      v rY d}~a d}~ww xY w# t:        $ r}d t=        |      v rY d}~ d}~ww xY w# tn        $ r Y w xY ww)%zExtract JSON chunks from various LLM provider streaming responses.

        Each provider has a different structure for streaming responses that needs
        specific handling to extract the relevant JSON data.F
event_typeNtext-generationtextc              3  *   K   | ]  }|d k7  r|  ywNr%   r   poss     r'   r   z+PartialBase.extract_json.<locals>.<genexpr>        %&,/+."9 ),%&   r   ro   r   r   Ttool-calls-chunktool_call_delta
parametersc              3  *   K   | ]  }|d k7  r|  ywr   r%   r   s     r'   r   z+PartialBase.extract_json.<locals>.<genexpr>"  r   r   c              3  *   K   | ]  }|d k7  r|  ywr   r%   r   s     r'   r   z+PartialBase.extract_json.<locals>.<genexpr>1  r   r   tool-calls-generation
tool_callsr   c              3  *   K   | ]  }|d k7  r|  ywr   r%   r   s     r'   r   z+PartialBase.extract_json.<locals>.<genexpr>C  r   r   c              3  *   K   | ]  }|d k7  r|  ywr   r%   r   s     r'   r   z+PartialBase.extract_json.<locals>.<genexpr>R  r   r   r]   content-deltadeltamessagecontentc              3  *   K   | ]  }|d k7  r|  ywr   r%   r   s     r'   r   z+PartialBase.extract_json.<locals>.<genexpr>g  !      )*03 03by -0)*r   tool-call-deltafunction	argumentsc              3  *   K   | ]  }|d k7  r|  ywr   r%   r   s     r'   r   z+PartialBase.extract_json.<locals>.<genexpr>~  r   r   valid `Part`rt   'ResponseFunctionCallArgumentsDeltaEventMode ) is not supported for MultiTask streaming)8r   COHERE_TOOLSCOHERE_JSON_SCHEMArF   minfindjsondumpsr   MISTRAL_STRUCTURED_OUTPUTSrc   choicesr   r   MISTRAL_TOOLSr   r   r   ANTHROPIC_JSONr   ANTHROPIC_TOOLSpartial_jsonVERTEXAI_JSON
candidatespartsVERTEXAI_TOOLSfunction_callrt   GENAI_STRUCTURED_OUTPUTS
ValueErrorr   GENAI_TOOLSGEMINI_JSONr   r]   to_dictRESPONSES_TOOLS"RESPONSES_TOOLS_WITH_INBUILT_TOOLSopenai.types.responsesr   rH   	FUNCTIONSwarn_mode_functions_deprecationJSONr   JSON_SCHEMACEREBRAS_JSONFIREWORKS_JSONPERPLEXITY_JSONWRITER_JSONTOOLSTOOLS_STRICTFIREWORKS_TOOLSr   NotImplementedErrorAttributeErrorr   r   json_startedr   r   r   
json_startr   rt   r   
chunk_typer   r   r   
json_chunkefcresp	resp_dictr   s                       r'   r   zPartialBase.extract_json  sA      Z	EYD--t/F/FGG!(d!CJ!%66#*5&$#??4?#/-0%&48IIcNDIIcN3S%&
 -/."
 $.#3$,/3'+JK'8"&J#'99 '/@$ G&ulDA  W!64F  #/-0%&48IIcNDIIcN3S%&
 -/."
 $.#3$,/3'+JK'8"&J%,UFD%AATA#/-0%&48IIcNDIIcN3S%&
 -/."
 $.#3$,/3'+JK'8"&J#'>>%,UL$%G
%#'::jm.F.F#GD#/-0%&48IIcNDIIcN3S%&
 -/."
 $.#3$,/3'+JK'8"&J%,UFD%AATA#/-0%&48IIcNDIIcN3S%&
 -/."
 $.#3$,/3'+JK'8"&J%,UFD%A
%8$+E7D$AE&-eY&EG&-gy$&GG'.w'EEtE'314)* 15		#04		#8.)* 13
2&J (2R'7(037L+/
+<D&*
'+<<$+E7D$AE&-eY&EG)0,)MJ'.z:t'LH'.xd'KKtK'314)* 15		#04		#8.)* 13
2&J (2R'7(037L+/
+<D&*
4:::**,,Q/55===4--- ::--a066AA **,,Q/55@@CLLVVV4...%*[[%5%55z5((4///++2224---**1-55;;A>CCC4...**((+3399!<JJOO  4888#jj( 4+++))!,44::1=KKPPB**R.(4+++#jj( 4,,, ++A.66<<Q?MMD $T
 2 24 8I*"jj6):;;((;;  "%)PQ#kk)]]t~~-<<>).q)9)?)?)M)M)W)WW:W",,		((**++,,(("  */q)9)?)?)G)GG:G",,

)),,))	"  */q)9)?)?)J)JJ:J)!}55??&0m&<&<&F&F F1#D6)RS mZ	x & )SV3$	 & )SV3$	d " s   	b&B bb&A8bb&Abb& A>bb& Ab8b&:Bb
b&Bbb&Bb*b&,EbaA7ba1I-bb&	a.a)"b&b&(a))a..b1	b:bbb&bbb	b#b&"b##b&c           	      K   d}| 2 3 d {   }	 |t         j                  t         j                  hv rAt        |dd       }|dk(  rZt        |dd       x}r|sAt	        d |j                  d      |j                  d      fD        d	      }|dk(  rd
}||d  }| n|dk(  rt        |dd       }t        |dd       xs t        |dd       }|rK|sBt	        d |j                  d      |j                  d      fD        d	      }|dk(  rd
}||d  }| nZt        |dd       x}rJ|sBt	        d |j                  d      |j                  d      fD        d	      }|dk(  rad
}||d  }| n|dk(  rt        |dd       }	|	rmt        j                  |	d   j                        }|sBt	        d |j                  d      |j                  d      fD        d	      }|dk(  rd
}||d  }| n~t        |dd       x}rn|sBt	        d |j                  d      |j                  d      fD        d	      }|dk(  r=d
}||d  }| n#t        |dd       }
|
dk(  rt        |dd       }t        |dd       }t        |dd       }t        |dd       x}r|sBt	        d |j                  d      |j                  d      fD        d	      }|dk(  rd
}||d  }| n|
dk(  rt        |dd       }t        |dd       }t        |dd       }	t        |	dd       }t        |dd       x}rI|sBt	        d |j                  d      |j                  d      fD        d	      }|dk(  rbd
}||d  }| |t         j                  k(  r|j                  j                  x}r| |t         j                  k(  r|j                  j                   |t         j                  k(  r0|j                  j                   d   j                  j"                   |t         j$                  k(  rv|j                  j                   d   j                  j&                  sO|j                  j                   d   j                  j&                  d   j(                  j*                   |t         j,                  k(  r3|j.                  d   j"                  j0                  d   j                   |t         j2                  k(  rPt        j                  |j.                  d   j"                  j0                  d   j4                  j6                         |t         j8                  k(  r	 |j                   |t         j>                  k(  rR|j.                  d   j"                  j0                  d   j4                  j6                  }t        j                  |       |t         j@                  k(  r	 |j                   |t         jB                  k(  ri|j.                  d   j"                  j0                  d   j4                  }tE        |      jG                  |      }d |v rt        j                  |d           |t         jH                  t         jJ                  hv r$dd!l&m'} tQ        ||      r|j                   n|j                   r|t         jR                  k(  rKt        jT                          |j                   d   j                  j4                  j*                  x}rI| nB|t         jV                  t         jX                  t         jZ                  t         j\                  t         j^                  t         j`                  t         jb                  hv r+|j                   d   j                  j"                  x}r| n|t         jd                  t         jf                  t         jh                  t         jj                  hv r[|j                   d   j                  j&                  x}rE|d   j(                  j*                  r,|d   j(                  j*                   ntm        d"| d#      [7 W# t:        $ r}dt=        |      v rY d }~z d }~ww xY w# t:        $ r}dt=        |      v rY d }~ d }~ww xY w# tn        $ r Y w xY w6 y w)$NFr   r   r   c              3  *   K   | ]  }|d k7  r|  ywr   r%   r   s     r'   r   z1PartialBase.extract_json_async.<locals>.<genexpr>  r   r   r   ro   r   r   Tr   r   r   c              3  *   K   | ]  }|d k7  r|  ywr   r%   r   s     r'   r   z1PartialBase.extract_json_async.<locals>.<genexpr>  r   r   c              3  *   K   | ]  }|d k7  r|  ywr   r%   r   s     r'   r   z1PartialBase.extract_json_async.<locals>.<genexpr>  r   r   r   r   r   c              3  *   K   | ]  }|d k7  r|  ywr   r%   r   s     r'   r   z1PartialBase.extract_json_async.<locals>.<genexpr>$  r   r   c              3  *   K   | ]  }|d k7  r|  ywr   r%   r   s     r'   r   z1PartialBase.extract_json_async.<locals>.<genexpr>3  r   r   r]   r   r   r   r   c              3  *   K   | ]  }|d k7  r|  ywr   r%   r   s     r'   r   z1PartialBase.extract_json_async.<locals>.<genexpr>H  r   r   r   r   r   c              3  *   K   | ]  }|d k7  r|  ywr   r%   r   s     r'   r   z1PartialBase.extract_json_async.<locals>.<genexpr>_  r   r   r   rt   r   r   r   )8r   r   r   rF   r   r   r   r   r   r   r   r   r   r   r   rc   r   r   r   r   r   r   r   r   r   r   r   rt   r   r   r   r   r   r   r]   r   r  r  r  r   rH   r  r  r  r   r  r  r	  r
  r  r  r  r  r   r  r  r  s                       r'   r   zPartialBase.extract_json_async  sN     % Y	 Y	%XD--t/F/FGG!(d!CJ!%66#*5&$#??4?#/-0%&48IIcNDIIcN3S%&
 -/."
 $.#3$,/3'+JK'8"&J#'99 '/@$ G&ulDA  W!64F  #/-0%&48IIcNDIIcN3S%&
 -/."
 $.#3$,/3'+JK'8"&J%,UFD%AATA#/-0%&48IIcNDIIcN3S%&
 -/."
 $.#3$,/3'+JK'8"&J#'>>%,UL$%G
%#'::jm.F.F#GD#/-0%&48IIcNDIIcN3S%&
 -/."
 $.#3$,/3'+JK'8"&J%,UFD%AATA#/-0%&48IIcNDIIcN3S%&
 -/."
 $.#3$,/3'+JK'8"&J%,UFD%A
%8$+E7D$AE&-eY&EG&-gy$&GG'.w'EEtE'314)* 15		#04		#8.)* 13
2&J (2R'7(037L+/
+<D&*
'+<<$+E7D$AE&-eY&EG)0,)MJ'.z:t'LH'.xd'KKtK'314)* 15		#04		#8.)* 13
2&J (2R'7(037L+/
+<D&*
4...%*[[%5%55z5((4///++2224:::**,,Q/55===4--- ::--a066AA **,,Q/55@@CLLVVV4---**1-55;;A>CCC4...**((+3399!<JJOO  4888#jj( 4+++))!,44::1=KKPPB**R.(4+++#jj( 4,,, ++A.66<<Q?MMD $T
 2 24 8I*"jj6):;;((;;  "%)PQ#kk)]]t~~-<<>).q)9)?)?)M)M)W)WW:W",,		((**++,,(("  */q)9)?)?)G)GG:G",,

)),,))	"  */q)9)?)?)J)JJ:J)!}55??&0m&<&<&F&F F1#D6)RS kY	v & )SV3$	 & )SV3$	d " q &s  cb?a"b?cB b/cA9b/cAb/&c(A?b/'c)Ab/cBb/cBb/'c)C+b/cDb/a%)A8b/"b
1I/b/ c"b?%	b.b;b/?cbbb/
	b,b' b/$c&b''b,,b//	b<8c;b<<cN)r5   type[T_Model])r   Iterable[Any]r   r   r3   r	   r5   Generator[T_Model, None, None])r   AsyncGenerator[Any, None]r   r   r3   r	   r5   AsyncGenerator[T_Model, None])r   r#  r3   r	   r5   r$  )r   AsyncGenerator[str, None]r3   r	   r5   r&  )r   r#  r   r   r5   zGenerator[str, None, None])r   r%  r   r   r5   r'  )r"   r#   r$   classmethodr   r   r   r   r   r   r   r   staticmethodr   r   r%   r&   r'   r   r   +  s   
!  !F D&D.2D>AD	'D D 2:>JM	&  !'!36!	'! !F !3!?B!	&! !F  ' 36 	'   D  3 ?B 	&   D b!b)-b	#b bH ]-]59]	"] ]r&   r   c                  H    e Zd ZdZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 ddZy)	r   zGenerate a new class which has PartialBase as a base class.

    Notes:
        This will enable partial validation of the model while streaming.

    Example:
        Partial[SomeModel]
    c                    t        d      )zfCannot instantiate.

        Raises:
            TypeError: Direct instantiation not allowed.
        z*Cannot instantiate abstract Partial class.)	TypeErrorr2   rt   r3   s      r'   __new__zPartial.__new__  s     DEEr&   c                4    t        d| j                   d      )zYCannot subclass.

        Raises:
           TypeError: Subclassing not allowed.
        zCannot subclass z.Partial)r,  r#   r-  s      r'   r.   zPartial.__init_subclass__  s     *3>>*:(CDDr&   c                ~   d}t        |t              r|\  }}dd}|j                  j                  d      r|j                  nd|j                   }t	        |f|t
        f|j                  d|j                  j                         D ci c]  \  }}||t        |      n ||       c}}}||_
        |S c c}}w )a  Convert model to one that inherits from PartialBase.

        We don't make the fields optional at this point, we just wrap them with `Partial` so the names of the nested models will be
        `Partial{ModelName}`. We want the output of `model_json_schema()` to
        reflect the name change, but everything else should be the same as the
        original model. During validation, we'll generate a true partial model
        to support partially defined fields.

        Nc                   t        |       }| j                  }t        |      7t        |      }t        |      }t	        d |D              }|r||   nd |_        nit        |t              rYt        |t              rI|t        v r||_        n9t        j                  |       	 t        |   |_        t        j                  |       |j                  |fS # t        j                  |       w xY w)Nc              3  2   K   | ]  }t        |        y wr   r}   r   s     r'   r   zBPartial.__class_getitem__.<locals>._wrap_models.<locals>.<genexpr>  s     %XC&:3&?%Xs   )r   r\   r   r   r   rH   r]   r^   r   r   r   r   r   r   s         r'   _wrap_modelsz/Partial.__class_getitem__.<locals>._wrap_models  s     I))J *%1)*5'
3 %%X<%X X 4@L/T $
 J-*Z2S!33" ( '**:6?/6z/B	,*22:>''22 +22:>s    C C(r   r   )r   r   r5   ztuple[object, FieldInfo])rH   r   r"   r   r   r   r#   rZ   ra   r   rB   )r2   wrapped_classr|   r3  r   rg   rk   rN   s           r'   __class_getitem__zPartial.__class_getitem__  s      $mU+2?/M/	3F %%00; ""=1123 	 %
#[1$//
 /<.H.H.N.N.P +J
 +7 )4%j12	
 )6%s   
 B9N)rt   objectr3   r6  r5   zPartial[T_Model])rt   r6  r3   r6  r5   r   )r4  z>type[T_Model] | tuple[type[T_Model], type[MakeFieldsOptional]]r5   r"  )r"   r#   r$   r7   r.  r.   r5  r%   r&   r'   r   r     sk    
F
F 
F 
	
F
E
E 
E 
	
EJUJ 
Jr&   r   )rc   r	   rd   ztype[BaseModel]rQ   r   re   r   r3   r	   r5   r	   )ra   r_   rR   ztype[BaseModel] | Nonerg   r   rQ   r   re   r   r3   r	   r5   r_   )F)r   r	   r|   rJ   r5   r	   )r   r   r5   ztuple[Any, FieldInfo])9
__future__r   r   r;   systypesr/   collections.abcr   r   r   copyr   	functoolsr   typingr	   r
   r   r   r   r   r   r   r   jiterr   pydanticr   r   pydantic.fieldsr   instructor.moder   instructor.utilsr   r   instructor.dsl.json_trackerr   r   r   version_info	UnionTyper   setr   __annotations__r!   r)   r>   rV   rL   r`   r~   r   r   r   r%   r&   r'   <module>rH     s   #  	 
   ? ?  
 
 
  , %   U J
)9
-wEOO,MHM !$ I %	 	
 
,2 YFD+
D+D+ D+ 	D+
 D+ 	D+N  *    	 
     
 J "'$	$$ 	$N"+"+"+JU
''" U
plgg lr&   