
    {h#                        d dl Z d dlZd dlmZmZmZmZ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 d dlmZ  ede	      Z G d
 d      Z G d de      Ze j,                  dk\  rd dlmZ deee      defdZndeee      defdZdeee      deee   df   fdZdeee      deee ef      fdZ!deee      deee ef      fdZ"deee      defdZ#deee      defdZ$ G d de      Z%deee      de%fdZ&y)    N)AnyOptionalTypeVarUnionget_args
get_origin)	Generator)	BaseModel)OpenAISchemaopenai_schema)Iterable)ModeT)boundc                   X    e Zd Zdee   fdZ	 	 d
dededee   dee	   de
eddf   f
d	Zy)ParallelBasemodelsc                     t        |      dkD  sJ d       || _        |D ci c]&  }t        |d      r|j                  n
t	        |      |( c}| _        y c c}w )Nr   zAt least one model is required__name__)lenr   hasattrr   strregistry)selfr   models      X/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/instructor/dsl/parallel.py__init__zParallelBase.__init__   sX    6{Q@ @@  
 &eZ8ENNc%j%O
 
s   +ANresponsemodevalidation_contextstrictreturnc              #   .  K   |t         j                  k(  sJ d       |j                  d   j                  j                  D ]Q  }|j
                  j                  }|j
                  j                  }| j                  |   j                  |||       S y w)NzMode must be PARALLEL_TOOLSr   contextr!   )
r   PARALLEL_TOOLSchoicesmessage
tool_callsfunctionname	argumentsr   model_validate_json)r   r   r   r    r!   	tool_callr+   r,   s           r   from_responsezParallelBase.from_response   s      t***I,II*!))!,44?? 	I%%**D!**44I--%99#5f :  	s   BBNN)r   
__module____qualname__typer   r   r   r   r   boolr	   r
   r/        r   r   r      sd    
\ 2 
 -1!%  %SM	
  
9dD(	)r6   r   c                   F    e Zd Z	 	 ddededee   dee   deeddf   f
dZ	y)	VertexAIParallelBaseNr   r   r    r!   r"   c              #     K   |t         j                  k(  sJ d       |r|j                  sy |j                  D ]  }|j                  r|j                  j                  s&|j                  j                  D ]  }t        |d      s|j                  |j                  j                  }|j                  j                  }|| j                  v sXt        j                  |      }	| j                  |   j                  |	||         y w)Nz$Mode must be VERTEXAI_PARALLEL_TOOLSfunction_callr$   )r   VERTEXAI_PARALLEL_TOOLS
candidatescontentpartsr   r:   r+   argsr   jsondumpsr-   )
r   r   r   r    r!   	candidatepartr+   r,   json_strs
             r   r/   z"VertexAIParallelBase.from_response2   s      t333 	
2	
3 x22!,, 	I$$I,=,=,C,C!))// 
41d6H6H6T--22D $ 2 2 7 7It}},#'::i#8"mmD1EE$.@ F  
		s   BD	D	:D	=D	r0   
r   r1   r2   r   r   r   r4   r	   r
   r/   r5   r6   r   r8   r8   1   sS    
 -1!%  %SM	
  
9dD(	)r6   r8   )   
   )	UnionTypetypehintr"   c                 H    t        t        |       d         t        t        fv S Nr   )r   r   r   rH   rI   s    r   is_union_typerM   T   s!    (8,Q/0UI4FFFr6   c                 <    t        t        |       d         t        u S rK   )r   r   r   rL   s    r   rM   rM   Y   s    (8,Q/0E99r6   .c                     t        |       }|t        urt        d|        t        |       rt	        t	        |       d         }|S t	        |       S )Nz)Model should be with Iterable instead of r   )r   r   	TypeErrorrM   r   )rI   should_be_iterable	the_typess      r   get_types_arrayrS   ]   sW    #H-)CH:NOOXXh/23	 Hr6   c                 n    t        |       }|D cg c]  }dt        |      j                  d c}S c c}w )Nr*   )r3   r*   )rS   r   rI   rR   r   s      r   handle_parallel_modelrV   l   s>    )I  u)=)K)KL  s   2c                 h    t        |       }|D cg c]  }t        |      j                   c}S c c}w N)rS   r   anthropic_schemarU   s      r   handle_anthropic_parallel_modelrZ   t   s-      )I?HIeM% 11IIIs   /c                 N    t        |       }t        |D cg c]  }| c} S c c}w rX   )rS   r   rU   s      r   ParallelModelr\   {   s%    )IY7E%7887   	"c                 N    t        |       }t        |D cg c]  }| c} S c c}w rX   )rS   r8   rU   s      r   VertexAIParallelModelr_      s%    )IY!?E%!?@@!?r]   c                   F    e Zd Z	 	 ddededee   dee   deeddf   f
dZ	y)	AnthropicParallelBaseNr   r   r    r!   r"   c              #   `  K   |t         j                  k(  sJ d       |rt        |d      sy |j                  D ]r  }t	        |dd       dk(  s|j
                  }|j                  }|| j                  v s;t        j                  |      }| j                  |   j                  |||       t y w)Nz%Mode must be ANTHROPIC_PARALLEL_TOOLSr=   r3   tool_user$   )r   ANTHROPIC_PARALLEL_TOOLSr   r=   getattrr+   inputr   r@   rA   r-   )	r   r   r   r    r!   r=   r+   r,   rD   s	            r   r/   z#AnthropicParallelBase.from_response   s      t444 	
3	
4 wx;'' 	Gw-;||#MM	4==(#zz)4H---AA *<V B  	s   A	B.&B.3;B.r0   rE   r5   r6   r   ra   ra      sS    
 -1!%  %SM	
  
9dD(	)r6   ra   c                 N    t        |       }t        |D cg c]  }| c} S c c}w rX   )rS   ra   rU   s      r   AnthropicParallelModelrh      s%    )I i"@U5"@AA"@r]   )'sysr@   typingr   r   r   r   r   r   collections.abcr	   pydanticr
   instructor.function_callsr   r   r   instructor.moder   r   r   r8   version_infotypesrH   r3   r4   rM   tuplerS   listdictr   rV   rZ   r\   r_   ra   rh   r5   r6   r   <module>rt      s   
   &  A $  C|$ 8< @ wGXa[ 1 Gd G
:Xa[ 1 :d :d8A;/ E$q'3,4G D!$5 $tCH~:N J8A;J	$sCx.J9D!- 9, 9
AD!$5 A:N A
L 4BT(1+%6 B;P Br6   