
    6i"                       d Z ddlmZ ddlmZmZ ddlmZ erddlm	Z
 n	 ddlm	Z
 ddZ	 	 	 	 	 	 dd	Z	 	 	 	 	 	 dd
Z	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZej"                  eedej$                  eediZy# e$ r dZ
Y Vw xY w)zxAI-specific utilities.

This module contains utilities specific to the xAI provider,
including reask functions, response handlers, and message formatting.
    )annotations)AnyTYPE_CHECKING   )Mode)chatNc                4   t         t        d      g }| D ]  }|d   }|j                  dd      }t        |t              rt        j
                  |      }nt        d      |dk(  r%|j                  t        j                  |             u|dk(  r%|j                  t        j                  |             |dk(  r%|j                  t        j                  |             |d	k(  r%|j                  t        j                  |             t        d
|        |S )z,Convert OpenAI-style messages to xAI format.z$xai_sdk is required for xAI providerrolecontent z.Only string content supported for xAI provideruser	assistantsystemtoolzUnsupported role: )xchatImportErrorget
isinstancestrtext
ValueErrorappendr   r   r   tool_result)messages	convertedmr
   r   cs         i/root/.openclaw/workspace/visionaryfx/venv/lib/python3.12/site-packages/instructor/providers/xai/utils.py_convert_messagesr      s    }@AAI :y%%	2&gs#

7#AMNN6>UZZ]+[ U__Q/0XU\\!_-V^U..w781$899!:"     c                d    | j                         } dd| d| d}| d   j                  |       | S )z
    Handle reask for xAI JSON mode when validation fails.

    Kwargs modifications:
    - Modifies: "messages" (appends user message requesting correction)
    r   zValidation Errors found:
zO
Recall the function correctly, fix the errors found in the following attempt:
r
   r   r   )copyr   )kwargsresponse	exception	reask_msgs       r   reask_xai_jsonr(   0   sT     [[]F/	{  ;L  MU  LV  WI :i(Mr    c                    | j                         } dt        |      d}| d   j                  |       dd| dd}| d   j                  |       | S )z
    Handle reask for xAI tools mode when validation fails.

    Kwargs modifications:
    - Modifies: "messages" (appends assistant and user messages for tool correction)
    r   r"   r   r   zValidation Error found:
z.
Recall the function correctly, fix the errors)r#   r   r   )r$   r%   r&   assistant_msgr'   s        r   reask_xai_toolsr+   D   sj     [[]F x=M :m, .yk9hiI :i(Mr    c                    |j                  dg       }t        |      |d<   |j                  dd       |j                  dd       |j                  dd       |j                  dd       | |fS )a  
    Handle xAI JSON mode.

    When response_model is None:
        - Converts messages from OpenAI format to xAI format
        - No schema is added to the request

    When response_model is provided:
        - Converts messages from OpenAI format to xAI format
        - Sets up the model for JSON parsing mode

    Kwargs modifications:
    - Modifies: "messages" (converts from OpenAI to xAI format)
    - Removes: instructor-specific kwargs (max_retries, validation_context, context, hooks)
    r   
x_messagesmax_retriesNvalidation_contextcontexthooks)r   r   popresponse_model
new_kwargsr   s      r   handle_xai_jsonr6   a   si    & ~~j"-H0:J| NN=$'NN'.NN9d#NN7D!:%%r    c                l   |j                  dg       }t        |      |d<   |j                  dd       |j                  dd       |j                  dd       |j                  dd       | Gt        At        j                  | j
                  | j                  xs d| j                         	      |d
<   | |fS )ax  
    Handle xAI tools mode.

    When response_model is None:
        - Converts messages from OpenAI format to xAI format
        - No tools are configured

    When response_model is provided:
        - Converts messages from OpenAI format to xAI format
        - Sets up tool schema from the response model
        - Configures tool choice for automatic tool selection

    Kwargs modifications:
    - Modifies: "messages" (converts from OpenAI to xAI format)
    - Adds: "tool" (xAI tool schema) - only when response_model provided
    - Removes: instructor-specific kwargs (max_retries, validation_context, context, hooks)
    r   r-   r.   Nr/   r0   r1   r   )namedescription
parametersr   )r   r   r2   r   r   __name____doc__model_json_schemar3   s      r   handle_xai_toolsr>      s    * ~~j"-H0:J| NN=$'NN'.NN9d#NN7D!!e&7"ZZ((&..4"%779

6 :%%r    )reaskr%   )r   zlist[dict[str, Any]])r$   dict[str, Any]r%   r   r&   	Exception)r4   ztype[Any] | Noner5   r@   returnz'tuple[type[Any] | None, dict[str, Any]])r<   
__future__r   typingr   r   moder   xai_sdkr   r   r   r   r(   r+   r6   r>   XAI_JSON	XAI_TOOLSXAI_HANDLERS r    r   <module>rK      s    # % %)
4 ( :&$&2@&,&>&&$&&2@&&,&&V 	MM# 	NN $	q  s   A4 4A>=A>