
    6i;                       d dl mZ d dlmZmZmZmZ d dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlZd	d
lmZ ddZddZddZerd dlmZ d dlmZ d dlmZ n	 d dlmZ d dlmZ d dlmZ eejB                  jD                  f	 	 	 	 	 	 	 dd       Z#eejB                  jD                  f	 	 	 	 	 	 	 dd       Z#ejB                  jD                  f	 	 	 	 	 	 	 ddZ#y# e $ r	 dZdZdZY {w xY w)    )annotations)AnyTYPE_CHECKINGcastoverloadN)IterableBase)PartialBase)AdapterBase)prepare_response_model)	BaseModel   )_convert_messagesc                n    t        | d      r(t        | j                        r| j                  } |       S i S )a,  
    Safely get JSON schema from a response model.

    Handles both regular models and wrapped types by checking for the
    model_json_schema method with hasattr.

    Args:
        response_model: The response model (may be regular or wrapped)

    Returns:
        The JSON schema dictionary
    model_json_schema)hasattrcallabler   )response_modelschema_methods     j/root/.openclaw/workspace/visionaryfx/venv/lib/python3.12/site-packages/instructor/providers/xai/client.py_get_model_schemar      s9     ~23((9 '88I    c                    t        | dd      S )z
    Safely get the name of a response model.

    Args:
        response_model: The response model

    Returns:
        The model name or 'Model' as fallback
    __name__Model)getattr)r   s    r   _get_model_namer   &   s     >:w77r   c                    t        | t              r|| _        t        | t              r| j                  D cg c]  }| c}S t        | t
              r| j                  S | S c c}w N)
isinstancer   _raw_responser   tasksr
   content)parsedraw_responsetasks      r   _finalize_parsed_responser&   3   sQ    &)$+&,'!'...&+&~~M /s   	A )Client)chatc                     y r    clientmodekwargss      r   from_xair/   L   s    
  r   c                     y r   r*   r+   s      r   r/   r/   T   s    
 "%r   c           
     ~    t         j                  j                  t         j                  j                  h}|vr1ddlm}  |t              d|D cg c]  }t        |       c}      t         t        t        f      s$ddlm
}  |dt               j                         	 d
	 	 	 	 	 	 	 d fd}	 d
	 	 	 	 	 	 	 d fd}t         t              r2t        j                  d |t         j                  j                  d	|S t        j                   d |t         j                  j                  d	|S c c}w )N   )	ModeErrorxAI)r-   providervalid_modes)ClientErrorz\Client must be an instance of xai_sdk.sync.client.Client or xai_sdk.aio.client.Client. Got: c           
     	  K   t        |      }|j                  d      }|j                  dd        |j                  dd        |j                  dd        |j                  dd        |j                  dd      } j                  j                  d||d|}| |j	                          d {   }|S | J | }	t
        j                  j                  k(  s|rt        |       }	|	J t
        j                  j                  k(  r1|r	|j                  j                  j                  t        j                  j                  t        j                  j                   j"                  t%        j&                  t)        |	            	             d
 |j+                         2        }
t-        t.        t0           |	      }t3        |t4              r|j7                  |
      S t3        |t8              r|j;                  |
      S t=        dt?        |              |jA                  |        d {   \  }}||_!        |S t        jD                  t?        |	      |	jF                  xs dt)        |	            }|j                  jH                  jK                  |       |jL                  jN                  }|j                  jP                  j                  t        jR                  |             |r|j+                         }d |2        }t-        t.        t0           |	      }t3        |t4              r|j7                  |      S t3        |t8              r|j;                  |      S t=        dt?        |              |j	                          d {   }|jT                  sddl+m,} ddl-m.} d}t_        |d      r"|j`                  rtc        |j`                        }nWt_        |d      rK|jd                  r?|jd                  }tg        |tb              r|}n tg        |th              r|rtc        |d         }|r6 ||      }t-        t.        tj           |	      } |||d |      }tm        ||      S t=        d|       |jT                  d   jL                  jn                  }ddl+m,} t-        t.        tj           |	      } |||d |      }tm        ||      S 7 7 7 Gw)Nmodelmax_retriesvalidation_contextcontexthooksstreamFr9   messagesformat_typeschemac               L   K   | 3 d {   \  }}|j                    7 6 y wr   r"   .0_chunks      r   	<genexpr>z,from_xai.<locals>.acreate.<locals>.<genexpr>   s     QQxq%u}}QQs   $" "$"$/Unsupported response model type for streaming:  namedescription
parametersc                  K   | 3 d {   \  }}|j                   r5|j                  dk(  r&|j                   d   j                  j                   N7 I6 y w)NREASON_INVALIDr   )
tool_callsfinish_reasonfunction	arguments)rG   resprH   s      r   rJ   z,from_xai.<locals>.acreate.<locals>.<genexpr>   sQ       %dA4+=+=AQ+Q OOA&//99 s&   AAAAAAAAr2   _validate_model_from_jsonextract_json_from_codeblocktextr"   r   INo tool calls returned from xAI and no text content available. Response: r*   )8r   popr(   createsample
instructorMode	XAI_TOOLSr   XAI_JSONprotoresponse_formatCopyFromxchatchat_pb2ResponseFormat
FormatTypeFORMAT_TYPE_JSON_SCHEMAjsondumpsr   r>   r   typer   
issubclassr   tasks_from_chunks_asyncr	   model_from_chunks_async
ValueErrorr   parser    tool__doc__toolsappendrU   rN   tool_choicerequired_toolrS   processing.function_callsrY   utilsr[   r   r\   strr"   r   listr   r&   rV   )r   r@   strictcall_kwargs
x_messagesr9   	is_streamr(   rW   prepared_modeljson_chunksrmrawr#   tool_obj	tool_namestream_iterargsrY   r[   text_contentr"   json_strmodel_for_validationr,   r-   s                           r   acreatezfrom_xai.<locals>.acreater   s!     'x0
(t,,d3	4(&OOHe4	!v{{!!R
RkR!&DK)))':??,,,	3NCN))):??+++

**33NN11$)NN$=$=$U$U#zz*;N*KL 2  R4;;=Q$y/>:b,/55kBBK055kBB$I/ZhJiIjk  %)JJ~$>>V'*$zz$^4*228b,^<H
 JJ##H- ))..IJJ""++E,?,?	,JK"kkm)4
 $y/>:b,/55d;;K055d;;$I/ZhJiIjk  "[[]*VD )+LtV,'*499~ y1dll"&,,%gs3+2L'67+.wqz?L##>|#L/3DI~/N,!:0(D&"  9FF$%%)F, 
 q)22<<R'+DI~'F$2($f 1>>C '> ?: +s9   B+S.S/E8S'S(ESSESSSc           
     	   t        |      }|j                  d      }|j                  dd        |j                  dd        |j                  dd        |j                  dd        |j                  dd      } j                  j                  d||d|}| |j	                         }|S | J | }	t
        j                  j                  k(  s|rt        |       }	|	J t
        j                  j                  k(  r)|r	|j                  j                  j                  t        j                  j                  t        j                  j                   j"                  t%        j&                  t)        |	            	             d
 |j+                         D        }
t-        t.        t0           |	      }t3        |t4              r|j7                  |
      S t3        |t8              r|j;                  |
      S t=        dt?        |              |jA                  |       \  }}||_!        |S t        jD                  t?        |	      |	jF                  xs dt)        |	            }|j                  jH                  jK                  |       |jL                  jN                  }|j                  jP                  j                  t        jR                  |             |r|j+                         }|D ]  \  }}|jT                  s|jT                  d   jL                  jV                  }t-        t.        t0           |	      }t3        |t4              r|j7                  |      c S t3        |t8              r|j;                  |      c S t=        dt?        |               y |j	                         }|jT                  sddl,m-} ddl.m/} d}ta        |d      r"|jb                  rte        |jb                        }nWta        |d      rK|jf                  r?|jf                  }ti        |td              r|}n ti        |tj              r|rte        |d         }|r6 ||      }t-        t.        tl           |	      } |||d |      }to        ||      S t=        d|       |jT                  d   jL                  jV                  }ddl,m-} t-        t.        tl           |	      } |||d |      }to        ||      S )Nr9   r:   r;   r<   r=   r>   Fr?   rA   c              3  :   K   | ]  \  }}|j                     y wr   rE   rF   s      r   rJ   z+from_xai.<locals>.create.<locals>.<genexpr>  s     KEu}}Ks   rK   rL   rM   r   r2   rX   rZ   r\   r"   r]   r*   )8r   r^   r(   r_   r`   ra   rb   rc   r   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   r   r>   r   ro   r   rp   r   tasks_from_chunksr	   model_from_chunksrs   r   rt   r    ru   rv   rw   rx   rU   rN   ry   rz   rS   rV   r{   rY   r|   r[   r   r\   r}   r"   r   r~   r   r&   )r   r@   r   r   r   r9   r   r(   rW   r   r   r   r   r#   r   r   r   rH   r   rY   r[   r   r"   r   r   r,   r-   s                            r   r_   zfrom_xai.<locals>.create   s(    'x0
(t,,d3	4(&OOHe4	!v{{!!R
RkR!;;=DK)))':??,,,	3NCN))):??+++

**33NN11$)NN$=$=$U$U#zz*;N*KL 2  LT[[]K$y/>:b,///<<K0//<<$I/ZhJiIjk  #jj8V'*$zz$^4*228b,^<H
 JJ##H- ))..IJJ""++E,?,?	,JK"kkm* GD! #q1::DD!$y/>B%b,7#%#7#7#=='K8#%#7#7#==","QRabpRqQr s#   {{}VD )+LtV,'*499~ y1dll"&,,%gs3+2L'67+.wqz?L##>|#L/3DI~/N,!:0(D&"  9FF$%%)F, 
 q)22<<R'+DI~'F$2($f 1>>r   )r,   r_   r5   r-   )T)r   ztype[BaseModel] | Noner@   zlist[dict[str, Any]]r   boolr   r   r*   )ra   rb   rd   rc   core.exceptionsr3   r}   r   
SyncClientAsyncClientr7   ro   r   AsyncInstructorProviderXAI
Instructor)	r,   r-   r.   r6   r3   mr7   r   r_   s	   ``       r   r/   r/   \   s   
 ??++Z__-F-FGK;0TU8UAQ8U
 	
 fz;782L))*,
 	
 s?.s?&s? s? 	s?p t?.t?&t? t? 	t?l &+&)) 
((,,	

 
 	
 $$ 
((,,	

 
 	
 9Vs   D:)r   r   returnzdict[str, Any])r   r   r   r}   )r#   r   r$   r   r   r   )r,   r   r-   instructor.Moder.   r   r   zinstructor.Instructor)r,   r   r-   r   r.   r   r   zinstructor.AsyncInstructor)r,   zSyncClient | AsyncClientr-   r   r.   r   r   z2instructor.Instructor | instructor.AsyncInstructor)$
__future__r   typingr   r   r   r   rm   instructor.dsl.iterabler   instructor.dsl.partialr	   instructor.dsl.simple_typer
   instructor.utils.corer   pydanticr   ra   r|   r   r   r   r&   xai_sdk.sync.clientr'   r   xai_sdk.aio.clientr   xai_sdkr(   rh   ImportErrorrb   rd   r/   r*   r   r   <module>r      s<   " 5 5  0 . 2 8   $*
8 88%<<) 
 'OO44  
    	  
  
 'OO44%%
% %  	% 
% 'OO44P
$P

P
 P
 8	P
-  
s   !C! !C/.C/