§
    ‚Štjf  ã                   ó   — d dl Z d dlZd dl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 mZ d dlmZ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mZ  ej        e¦  «        Z  e¦   «         r%d dl!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' d dl(m)Z) ndZ! e¦   «         rd dl*m+Z+ e,e-e.ef                  Z/e0e1e.e2e e3d¦  «        dfZ4 ej5        dej6        ¦  «        Z7 ej5        dej6        ¦  «        Z8 ej5        dej6        ej9        z  ¦  «        Z: ej5        dej6        ¦  «        Z; G d„ de<¦  «        Z= G d„ de<¦  «        Z>de3de-e.e.f         fd„Z?de.de-fd„Z@dede-fd„ZAd e.deBe.dz  e-dz  e.dz  f         fd!„ZCdede-fd"„ZDeed#e.dz  deEe.         fd$„¦   «         ¦   «         ZFd%„ ZGed&„ ¦   «         ZHed'„ ¦   «         ZI	 	 	 	 	 	 d3d)e,e/         d*e,e-ez           dz  d+e/dz  d#e.dz  d,e2d-e2e.z  d.e2de.fd/„ZJd0„ ZK G d1„ d2¦  «        ZLdS )4é    N)ÚCallable)Úcontextmanager)Údeepcopy)Údatetime)Ú	lru_cache)Ú
isfunction)ÚAnyÚLiteralÚUnionÚget_argsÚ
get_originÚget_type_hintsÚno_type_check)Úversioné   )Úlogging)Úis_jinja_availableÚis_torch_availableÚis_vision_available)Ú	Extension)ÚImmutableSandboxedEnvironment)ÚImage.z(^(.*?)[\n\s]*(Args:|Returns:|Raises:|\Z)z0\n\s*Args:\n\s*(.*?)[\n\s]*(Returns:|Raises:|\Z)a1  
(?:^|\n)  # Match the start of the args block, or a newline
\s*(\w+):\s*  # Capture the argument name and strip spacing
(.*?)\s*  # Capture the argument description, which can span multiple lines, and strip trailing spacing
(?=\n\s*\w+:|\Z)  # Stop when you hit the next argument or the end of the block
z*\n\s*Returns:\n\s*(.*?)[\n\s]*(Raises:|\Z)c                   ó   — e Zd ZdZdS )ÚTypeHintParsingExceptionzJException raised for errors in parsing type hints to generate JSON schemasN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/utils/chat_template_utils.pyr   r   H   ó   € € € € € ØTÐTÐTÐTr!   r   c                   ó   — e Zd ZdZdS )ÚDocstringParsingExceptionzJException raised for errors in parsing docstrings to generate JSON schemasNr   r    r!   r"   r%   r%   L   r#   r!   r%   Ú
param_typeÚreturnc                 ó  — t           ddit          ddit          ddit          ddit	          d ¦  «        ddit
          i i}t          ¦   «         rddi|t          <   t          ¦   «         rdd l	}dd	i||j
        <   |                     | dd
i¦  «        S )NÚtypeÚintegerÚnumberÚstringÚbooleanÚnullÚimager   ÚaudioÚobject)ÚintÚfloatÚstrÚboolr)   r	   r   r   r   ÚtorchÚTensorÚget)r&   Útype_mappingr6   s      r"   Ú_get_json_schema_typer:   P   s¨   € åˆf�iÐ Ý�˜Ð!Ýˆf�hÐÝˆv�yÐ!ÝˆT‰
Œ
�V˜VÐ$ÝˆRð€Lõ ÑÔð 0Ø% wÐ/ˆ•UÑÝÑÔð 7Øˆˆˆà&,¨gÐ%6ˆ�U”\Ñ"Ø×Ò˜J¨°Ð(:Ñ;Ô;Ð;r!   Úhintc                 ó°  — t          | ¦  «        }t          | ¦  «        }|€.	 t          | ¦  «        S # t          $ r t	          d| ¦  «        ‚w xY w|t
          u s#t          t          d¦  «        r‡|t          j        u ryd„ |D ¦   «         }t          |¦  «        dk    r	|d         }n9t          d„ |D ¦   «         ¦  «        rdt          d„ |D ¦   «         ¦  «        i}nd	|i}t          d ¦  «        |v rd
|d<   |S |t          u ròt          |¦  «        dk    rßt          t          t           t"          t          d ¦  «        f}g }|D ]l}t          |¦  «        |vrt	          d¦  «        ‚t          t          |¦  «        ¦  «                             d¦  «        }|�||vr|                     |¦  «         Œmt          |¦  «        dk    r|                     ¦   «         nt+          |¦  «        t+          |¦  «        dœS |t*          u r|sddiS dt-          |d         ¦  «        dœS |t.          u ro|sddiS t          |¦  «        dk    r4t	          dt!          | ¦  «                             dd¦  «        › d�¦  «        ‚d|v rt	          d¦  «        ‚dd„ |D ¦   «         dœS |t2          u r1ddi}	t          |¦  «        dk    rt-          |d         ¦  «        |	d<   |	S t	          d| ¦  «        ‚)NzGCouldn't parse this type hint, likely due to a custom class or object: Ú	UnionTypec                 óN   — g | ]"}|t          d ¦  «        u¯t          |¦  «        ‘Œ#S ©N)r)   Ú_parse_type_hint©Ú.0Úts     r"   ú
<listcomp>z$_parse_type_hint.<locals>.<listcomp>p   s1   € ÐMÐMÐM¨A¸Å$ÀtÁ*Ä*Ð9LÐ9LÕ$ QÑ'Ô'Ð9LÐ9LÐ9Lr!   r   r   c              3   óT   K  — | ]#}d |v ot          |d          t          ¦  «        V — Œ$dS )r)   N)Ú
isinstancer4   ©rB   Úsubtypes     r"   ú	<genexpr>z#_parse_type_hint.<locals>.<genexpr>t   s:   è è € Ð`Ð`ÈG�˜7Ð"ÐG¥z°'¸&´/Å3Ñ'GÔ'GÐ`Ð`Ð`Ð`Ð`Ð`r!   r)   c                 ó   — g | ]
}|d          ‘ŒS )r)   r    rG   s     r"   rD   z$_parse_type_hint.<locals>.<listcomp>v   s   € Ð*SÐ*SÐ*S¸w¨7°6¬?Ð*SÐ*SÐ*Sr!   ÚanyOfTÚnullablez?Only the valid python literals can be listed in typing.Literal.)r)   ÚenumÚarray)r)   ÚitemszThe type hint ztyping.Ú a1   is a Tuple with a single element, which we do not automatically convert to JSON schema as it is rarely necessary. If this input can contain more than one element, we recommend using a list[] type instead, or if it really is a single element, remove the tuple[] wrapper and just pass the element directly..znConversion of '...' is not supported in Tuple type hints. Use list[] types for variable-length inputs instead.c                 ó,   — g | ]}t          |¦  «        ‘ŒS r    )r@   rA   s     r"   rD   z$_parse_type_hint.<locals>.<listcomp>¤   s!   € Ð0SÐ0SÐ0SÈÕ1AÀ!Ñ1DÔ1DÐ0SÐ0SÐ0Sr!   )r)   ÚprefixItemsr1   é   ÚadditionalProperties)r   r   r:   ÚKeyErrorr   r   ÚhasattrÚtypesr=   ÚlenÚallÚsortedr)   r
   r2   r3   r4   r5   r8   ÚappendÚpopÚlistr@   ÚtupleÚreplaceÚdict)
r;   ÚoriginÚargsÚsubtypesÚreturn_dictÚLITERAL_TYPESÚ
args_typesÚargÚarg_typeÚouts
             r"   r@   r@   b   sL  € Ý˜ÑÔ€FÝ�D‰>Œ>€Dà€~ð	Ý(¨Ñ.Ô.Ð.øÝð 	ð 	ð 	Ý*ØYÐ[_ñô ð ð	øøøð
 
•5ˆˆ�W¥U¨KÑ8Ô8ˆ¸VÅuÄÐ=VÐ=VàMÐM°ÐMÑMÔMˆÝˆx‰=Œ=˜AÒÐà" 1œ+ˆKˆKÝÐ`Ð`ÐW_Ð`Ñ`Ô`Ñ`Ô`ð 	.à!¥6Ð*SÐ*SÈ(Ð*SÑ*SÔ*SÑ#TÔ#TÐUˆKˆKð # HÐ-ˆKÝ�‰:Œ:˜ÐÐØ&*ˆK˜
Ñ#ØÐà	•7Ð	Ð	�s 4™yœy¨1š}˜}Ý�e¥S­$µ°T±
´
Ð;ˆØˆ
Øð 	,ð 	,ˆCÝ�C‰yŒy Ð-Ð-Ý.Ð/pÑqÔqÐqÝ,­T°#©Y¬YÑ7Ô7×;Ò;¸FÑCÔCˆHØÐ#¨¸
Ð(BÐ(BØ×!Ò! (Ñ+Ô+Ð+øå(+¨J©¬¸1Ò(<Ð(<�J—N’NÑ$Ô$Ð$Å$ÀzÑBRÔBRÝ˜‘J”Jð
ð 
ð 	
ð
 
•4ˆˆØð 	IØ˜GÐ$Ð$ð $Õ.>¸tÀA¼wÑ.GÔ.GÐHÐHÐHà	•5ˆˆØð 	%Ø˜GÐ$Ð$Ýˆt‰9Œ9˜Š>ˆ>Ý*ð-¥ T¡¤×!2Ò!2°9¸bÑ!AÔ!Að -ð -ð -ñô ð ð �$ˆ;ˆ;Ý*ð#ñô ð ð
  Ð0SÐ0SÈdÐ0SÑ0SÔ0SÐTÐTÐTà	•4ˆˆð �xÐ ˆÝˆt‰9Œ9˜Š>ˆ>Ý*:¸4À¼7Ñ*CÔ*CˆCÐ&Ñ'Øˆ
å
"Ð#lÐnrÑ
sÔ
sÐss	   ¢1 ±AÚfuncc                 ó¦  — t          | ¦  «        }t          j        | ¦  «        }t          | dd¦  «        }t	          t          |j        ¦  «        d ¦  «        }|dv r(|j        |         j        t          j        j	        k    r|}nd }g }|j         
                    ¦   «         D ]o\  }}||k    rŒ|j        t          j        j	        k    rt          d|j        › d|› �¦  «        ‚|j        t          j        j	        k    r|                     |¦  «         Œpi }	| 
                    ¦   «         D ]\  }}
||k    rŒt          |
¦  «        |	|<   Œd|	dœ}|r||d<   |S )	Nr   Ú	operation>   ÚclsÚselfz	Argument z$ is missing a type hint in function r1   )r)   Ú
propertiesÚrequired)r   ÚinspectÚ	signatureÚgetattrÚnextÚiterÚ
parametersÚ
annotationÚ	ParameterÚemptyrO   r   ÚnameÚdefaultr[   r@   )rj   Ú
type_hintsrr   Ú	func_nameÚfirst_param_nameÚimplicit_arg_namerp   Ú
param_nameÚparamro   r&   Úschemas               r"   Ú"_convert_type_hints_to_json_schemarƒ   ±   s„  € Ý Ñ%Ô%€JÝÔ! $Ñ'Ô'€IÝ˜˜j¨+Ñ6Ô6€Iõ �D Ô!5Ñ6Ô6¸Ñ=Ô=Ðà˜OÐ+Ð+ØÔ Ð!1Ô2Ô=ÅÔARÔAXÒXÐXà,ÐÐà ÐØ€HØ&Ô1×7Ò7Ñ9Ô9ð (ð (Ñˆ
�EØÐ*Ò*Ð*ØØÔ�wÔ0Ô6Ò6Ð6Ý*Ð+r°u´zÐ+rÐ+rÐgpÐ+rÐ+rÑsÔsÐsØŒ=�GÔ-Ô3Ò3Ð3Ø�OŠO˜JÑ'Ô'Ð'øà€JØ",×"2Ò"2Ñ"4Ô"4ð >ð >Ñˆ
�JØÐ*Ò*Ð*ØÝ!1°*Ñ!=Ô!=ˆ
�:ÑÐà¨jÐ9Ð9€FØð &Ø%ˆˆzÑà€Mr!   Ú	docstringc                 ód  — t                                | ¦  «        }t                               | ¦  «        }t                               | ¦  «        }|r'|                     d¦  «                             ¦   «         nd}|r'|                     d¦  «                             ¦   «         nd}|r'|                     d¦  «                             ¦   «         nd}|�Yd                     d„ |                     d¦  «        D ¦   «         ¦  «        }t           	                    |¦  «        }d„ |D ¦   «         }ni }|||fS )a  
    Parses a Google-style docstring to extract the function description,
    argument descriptions, and return description.

    Args:
        docstring (str): The docstring to parse.

    Returns:
        The function description, arguments, and return description.
    r   Nú
c                 ó:   — g | ]}|                      ¦   «         ¯|‘ŒS r    )Ústrip)rB   Úlines     r"   rD   z1parse_google_format_docstring.<locals>.<listcomp>í   s*   € Ð#`Ð#`Ð#`¨TÐSW×S]ÒS]ÑS_ÔS_Ð#` DÐ#`Ð#`Ð#`r!   c           	      óx   — i | ]7}|d          t          j        dd|d                              ¦   «         ¦  «        “Œ8S )r   z	\s*\n+\s*ú r   )ÚreÚsubrˆ   )rB   Úmatchs     r"   ú
<dictcomp>z1parse_google_format_docstring.<locals>.<dictcomp>ï   s:   € Ð`Ð`Ð`Èu�U˜1”X�rœv l°C¸¸q¼¿ºÑ9IÔ9IÑJÔJÐ`Ð`Ð`r!   )
Údescription_reÚsearchÚargs_reÚ
returns_reÚgrouprˆ   ÚjoinÚsplitÚargs_split_reÚfindall)	r„   Údescription_matchÚ
args_matchÚreturns_matchÚdescriptionÚdocstring_argsÚreturnsÚmatchesÚ	args_dicts	            r"   Úparse_google_format_docstringr¡   Õ   s,  € õ '×-Ò-¨iÑ8Ô8ÐÝ—’ 	Ñ*Ô*€JÝ×%Ò% iÑ0Ô0€Mð 9JÐSÐ#×)Ò)¨!Ñ,Ô,×2Ò2Ñ4Ô4Ð4Èt€KØ4>ÐH�Z×%Ò% aÑ(Ô(×.Ò.Ñ0Ô0Ð0ÀD€NØ0=ÐGˆm×!Ò! !Ñ$Ô$×*Ò*Ñ,Ô,Ð,À4€Gð Ð!ØŸšÐ#`Ð#`°^×5IÒ5IÈ$Ñ5OÔ5OÐ#`Ñ#`Ô#`ÑaÔaˆÝ×'Ò'¨Ñ7Ô7ˆØ`Ð`ÐX_Ð`Ñ`Ô`ˆ	ˆ	àˆ	à˜	 7Ð*Ð*r!   c                 óò  — t          j        | ¦  «        }t          | dd¦  «        }|st          d|› d�¦  «        ‚|                     ¦   «         }t          |¦  «        \  }}}t          | ¦  «        }|d                              dd¦  «        x}�|�||d<   |d                              ¦   «         D ]¶\  }}	||vrt          d|› d	|› d
�¦  «        ‚||         }
t          j
        d|
t          j        ¬¦  «        }|rgd„ t          j        |                     d¦  «        ¦  «        D ¦   «         |	d<   |j        d|                     ¦   «         …                              ¦   «         }
|
|	d<   Œ·|||dœ}|�||d<   d|dœS )aO  
    This function generates a JSON schema for a given function, based on its docstring and type hints. This is
    mostly used for passing lists of tools to a chat template. The JSON schema contains the name and description of
    the function, as well as the names, types and descriptions for each of its arguments. `get_json_schema()` requires
    that the function has a docstring, and that each argument has a description in the docstring, in the standard
    Google docstring format shown below. It also requires that all user-facing arguments have valid Python type hints.
    When passing methods, implicit receiver arguments (`self` or `cls`) are ignored.

    Although it is not required, a `Returns` block can also be added, which will be included in the schema. This is
    optional because most chat templates ignore the return value of the function.

    Args:
        func: The function to generate a JSON schema for.

    Returns:
        A dictionary containing the JSON schema for the function.

    Examples:
    ```python
    >>> def multiply(x: float, y: float):
    >>>    '''
    >>>    A function that multiplies two numbers
    >>>
    >>>    Args:
    >>>        x: The first number to multiply
    >>>        y: The second number to multiply
    >>>    '''
    >>>    return x * y
    >>>
    >>> print(get_json_schema(multiply))
    {
        "name": "multiply",
        "description": "A function that multiplies two numbers",
        "parameters": {
            "type": "object",
            "properties": {
                "x": {"type": "number", "description": "The first number to multiply"},
                "y": {"type": "number", "description": "The second number to multiply"}
            },
            "required": ["x", "y"]
        }
    }
    ```

    The general use for these schemas is that they are used to generate tool descriptions for chat templates that
    support them, like so:

    ```python
    >>> from transformers import AutoTokenizer
    >>> from transformers.utils import get_json_schema
    >>>
    >>> def multiply(x: float, y: float):
    >>>    '''
    >>>    A function that multiplies two numbers
    >>>
    >>>    Args:
    >>>        x: The first number to multiply
    >>>        y: The second number to multiply
    >>>    return x * y
    >>>    '''
    >>>
    >>> multiply_schema = get_json_schema(multiply)
    >>> tokenizer = AutoTokenizer.from_pretrained("CohereForAI/c4ai-command-r-v01")
    >>> messages = [{"role": "user", "content": "What is 179 x 4571?"}]
    >>> formatted_chat = tokenizer.apply_chat_template(
    >>>     messages,
    >>>     tools=[multiply_schema],
    >>>     chat_template="tool_use",
    >>>     return_dict=True,
    >>>     return_tensors="pt",
    >>>     add_generation_prompt=True
    >>> )
    >>> # The formatted chat can now be passed to model.generate()
    ```

    Each argument description can also have an optional `(choices: ...)` block at the end, such as
    `(choices: ["tea", "coffee"])`, which will be parsed into an `enum` field in the schema. Note that this will
    only be parsed correctly if it is at the end of the line:

    ```python
    >>> def drink_beverage(beverage: str):
    >>>    '''
    >>>    A function that drinks a beverage
    >>>
    >>>    Args:
    >>>        beverage: The beverage to drink (choices: ["tea", "coffee"])
    >>>    '''
    >>>    pass
    >>>
    >>> print(get_json_schema(drink_beverage))
    ```
    {
        'name': 'drink_beverage',
        'description': 'A function that drinks a beverage',
        'parameters': {
            'type': 'object',
            'properties': {
                'beverage': {
                    'type': 'string',
                    'enum': ['tea', 'coffee'],
                    'description': 'The beverage to drink'
                    }
                },
            'required': ['beverage']
        }
    }
    r   rl   z Cannot generate JSON schema for z because it has no docstring!ro   r'   Nrœ   z< because the docstring has no description for the argument 'ú'z\(choices:\s*(.*?)\)\s*$)Úflagsc                 ód   — g | ]-}t          |t          ¦  «        r|                     ¦   «         n|‘Œ.S r    )rF   r4   rˆ   )rB   Úcs     r"   rD   z#get_json_schema.<locals>.<listcomp>v  s3   € ÐpÐpÐpÈ­:°a½Ñ+=Ô+=ÐD˜aŸgšg™iœi˜iÀ1ÐpÐpÐpr!   r   rM   )rz   rœ   rv   Úfunction)r)   r§   )rq   Úgetdocrs   r%   rˆ   r¡   rƒ   r\   rO   rŒ   r‘   Ú
IGNORECASEÚjsonÚloadsr”   r,   Ústart)rj   Údocr}   Úmain_docÚparam_descriptionsÚ
return_docÚjson_schemard   rg   r‚   ÚdescÚenum_choicesÚoutputs                r"   Úget_json_schemarµ   ö   sÖ  € õX Œ.˜Ñ
Ô
€CÝ˜˜j¨+Ñ6Ô6€Iàð uÝ'Ð(sÈ9Ð(sÐ(sÐ(sÑtÔtÐtØ
�)Š)‰+Œ+€CÝ/LÈSÑ/QÔ/QÑ,€HÐ  *å4°TÑ:Ô:€KØ" <Ô0×4Ò4°X¸tÑDÔDÐDˆÐQØÐ!Ø)3ˆK˜Ñ&Ø" <Ô0×6Ò6Ñ8Ô8ð 
%ð 
%‰ˆˆVØÐ(Ð(Ð(Ý+ð A°9ð  Að  AÐz}ð  Að  Að  Añô ð ð " #Ô&ˆÝ”yÐ!<¸dÍ"Ì-ÐXÑXÔXˆØð 	GØpÐpÍdÌjÐYe×YkÒYkÐlmÑYnÔYnÑNoÔNoÐpÑpÔpˆF�6‰NØÔ&Ð'=¨×);Ò);Ñ)=Ô)=Ð'=Ô>×DÒDÑFÔFˆDØ $ˆˆ}ÑÐà°ÈÐTÐT€FØÐØ&ˆˆxÑØ¨FÐ3Ð3Ð3r!   Úchat_templatec                 óÌ   — | €t          ¦   «         S t          | ¦  «        }|j                             | ¦  «        }t          t          j                             |¦  «        ¦  «        S )ac  Return the set of undeclared variables referenced by a chat template.

    Uses ``jinja2.meta.find_undeclared_variables`` so that callers can
    automatically distinguish template-level kwargs from processor kwargs
    without maintaining a manual allowlist. Needed only to support BC as we
    allowed all `kwargs` to be merged into one in the past
    )Ú	frozensetÚ_compile_jinja_templateÚenvironmentÚparseÚjinja2ÚmetaÚfind_undeclared_variables)r¶   ÚcompiledÚasts      r"   Ú_get_template_variablesrÁ   €  sU   € ð ÐÝ‰{Œ{ÐÝ& }Ñ5Ô5€HØ
Ô
×
$Ò
$ ]Ñ
3Ô
3€CÝ•V”[×:Ò:¸3Ñ?Ô?Ñ@Ô@Ð@r!   c           	      óö   — g }g }| j                              ||¦  «        5   | j        d||||dœ|¤ŽD ]}|                     |¦  «         Œd                     |¦  «        }	d d d ¦  «         n# 1 swxY w Y   |	|fS )N©ÚmessagesÚtoolsÚ	documentsÚadd_generation_promptrP   r    )rº   Úactivate_trackerÚgenerater[   r•   )
Úcompiled_templaterÄ   rÅ   rÆ   rÇ   Útemplate_kwargsÚrendered_blocksÚgeneration_indicesÚblockÚrendered_chats
             r"   Ú_render_with_assistant_indicesrÐ   ‘  sõ   € ð €OØÐØ	Ô	&×	7Ò	7¸ÐI[Ñ	\Ô	\ð 	1ð 	1Ø/Ð&Ô/ð 
ØØØØ"7ð	
ð 
ð
 ð
ð 
ð 	*ð 	*ˆEð ×"Ò" 5Ñ)Ô)Ð)Ð)ØŸš Ñ0Ô0ˆð	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1ð Ð,Ð,Ð,s    A A,Á,A0Á3A0c                 ó    — t          | ¦  «        S r?   )Ú_cached_compile_jinja_template)r¶   s    r"   r¹   r¹   £  s   € å)¨-Ñ8Ô8Ð8r!   c                 óÄ  — t          ¦   «         st          d¦  «        ‚ G d„ dt          ¦  «        }t          j        t
          j        ¦  «        t          j        d¦  «        k     rt          dt
          j        › d�¦  «        ‚d„ }dd	„}d
„ }t          dd|t
          j        j	        g¬¦  «        }||j
        d<   ||j        d<   ||j        d<   |                     | ¦  «        S )Nzbapply_chat_template requires jinja2 to be installed. Please install it using `pip install jinja2`.c                   óü   ‡ — e Zd ZdhZdefˆ fd„Zdej        j        dej	        j
        fd„Zej        dej	        j        dej        j        defd	„¦   «         Zdefd
„Zedee         dee         fd„¦   «         Zˆ xZS )ú8_cached_compile_jinja_template.<locals>.AssistantTrackerÚ
generationrº   c                 óœ   •— t          ¦   «                              |¦  «         |                     | j        ¬¦  «         d | _        d | _        d S )N)rÈ   )ÚsuperÚ__init__ÚextendrÈ   Ú_rendered_blocksÚ_generation_indices)rn   rº   Ú	__class__s     €r"   rÙ   zA_cached_compile_jinja_template.<locals>.AssistantTracker.__init__³  sK   ø€ å‰GŒG×Ò˜[Ñ)Ô)Ð)Ø×Ò°Ô0EÐÑFÔFÐFØ$(ˆDÔ!Ø'+ˆDÔ$Ð$Ð$r!   Úparserr'   c                 óô   — t          |j        ¦  «        j        }|                     dgd¬¦  «        }t          j                             |                      d¦  «        g g |¦  «                             |¦  «        S )Nzname:endgenerationT)Údrop_needleÚ_generation_support)	rt   ÚstreamÚlinenoÚparse_statementsr¼   ÚnodesÚ	CallBlockÚcall_methodÚ
set_lineno)rn   rÞ   rã   Úbodys       r"   r»   z>_cached_compile_jinja_template.<locals>.AssistantTracker.parseº  sm   € Ý˜&œ-Ñ(Ô(Ô/ˆFØ×*Ò*Ð,@Ð+AÈtÐ*ÑTÔTˆDÝ”<×)Ò)¨$×*:Ò*:Ð;PÑ*QÔ*QÐSUÐWYÐ[_Ñ`Ô`×kÒkÐlrÑsÔsÐsr!   ÚcontextÚcallerc                 óì   —  |¦   «         }|                       ¦   «         rUt          d                     | j        ¦  «        ¦  «        }|t          |¦  «        z   }| j                             ||f¦  «         |S )NrP   )Ú	is_activerX   r•   rÛ   rÜ   r[   )rn   rê   rë   ÚrvÚstart_indexÚ	end_indexs         r"   rá   zL_cached_compile_jinja_template.<locals>.AssistantTracker._generation_support¿  sm   € à�‘”ˆBØ�~Š~ÑÔð Jå! "§'¢'¨$Ô*?Ñ"@Ô"@ÑAÔA�Ø'­#¨b©'¬'Ñ1�	ØÔ(×/Ò/°¸iÐ0HÑIÔIÐIØˆIr!   c                 ó&   — | j         d up| j        d uS r?   )rÛ   rÜ   )rn   s    r"   rí   zB_cached_compile_jinja_template.<locals>.AssistantTracker.is_activeÉ  s   € ØÔ(°Ð4Ð\¸Ô8PÐX\Ð8\Ð\r!   rÌ   rÍ   c              3   ó¸   K  — 	 |                       ¦   «         rt          d¦  «        ‚|| _        || _        d V — d | _        d | _        d S # d | _        d | _        w xY w)Nz3AssistantTracker should not be reused before closed)rí   Ú
ValueErrorrÛ   rÜ   )rn   rÌ   rÍ   s      r"   rÈ   zI_cached_compile_jinja_template.<locals>.AssistantTracker.activate_trackerÌ  s{   è è € ð	0Ø—>’>Ñ#Ô#ð \Ý$Ð%ZÑ[Ô[Ð[Ø(7�Ô%Ø+=�Ô(à���à(,�Ô%Ø+/�Ô(Ð(Ð(øð )-�Ô%Ø+/�Ô(Ð/Ð/Ð/Ð/s   „5A	 Á	A)r   r   r   Útagsr   rÙ   r¼   rÞ   ÚParserrå   ræ   r»   Úpass_eval_contextÚEvalContextÚruntimeÚMacror4   rá   r5   rí   r   r]   r2   rÈ   Ú__classcell__)rÝ   s   @r"   ÚAssistantTrackerrÕ   ¯  s  ø€ € € € € àˆ~ˆð	,Ð(Eð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð	t ¤Ô 4ð 	t¸¼Ô9Oð 	tð 	tð 	tð 	tð
 
Ô	!ð	¨v¬|Ô/Gð 	ÐQWÔQ_ÔQeð 	Ðjmð 	ð 	ð 	ñ 
"Ô	!ð	ð	]˜tð 	]ð 	]ð 	]ð 	]ð 
ð
	0°D¸´Ið 
	0ÐSWÐX[ÔS\ð 
	0ð 
	0ð 
	0ñ 
Œð
	0ð 
	0ð 
	0ð 
	0ð 
	0r!   rû   z3.1.0zLapply_chat_template requires jinja2>=3.1.0 to be installed. Your version is ú.c                 ó@   — t           j                             | ¦  «        ‚r?   )r¼   Ú
exceptionsÚTemplateError©Úmessages    r"   Úraise_exceptionz7_cached_compile_jinja_template.<locals>.raise_exceptionÞ  s   € ÝÔ×-Ò-¨gÑ6Ô6Ð6r!   Fc                 ó4   — t          j        | ||||¬¦  «        S )N)Úensure_asciiÚindentÚ
separatorsÚ	sort_keys)rª   Údumps)Úxr  r  r  r  s        r"   Útojsonz._cached_compile_jinja_template.<locals>.tojsoná  s!   € õ Œz˜!¨,¸vÐR\ÐhqÐrÑrÔrÐrr!   c                 óN   — t          j        ¦   «                              | ¦  «        S r?   )r   ÚnowÚstrftime)Úformats    r"   Ústrftime_nowz4_cached_compile_jinja_template.<locals>.strftime_nowæ  s   € ÝŒ|‰~Œ~×&Ò& vÑ.Ô.Ð.r!   T)Útrim_blocksÚlstrip_blocksÚ
extensionsr
  r  r  )FNNF)r   ÚImportErrorr   r   r»   r¼   Ú__version__r   ÚextÚloopcontrolsÚfiltersÚglobalsÚfrom_string)r¶   rû   r  r
  r  Ú	jinja_envs         r"   rÒ   rÒ   ¨  s4  € åÑÔð 
ÝØpñ
ô 
ð 	
ð(0ð (0ð (0ð (0ð (0�9ñ (0ô (0ð (0õT „}•VÔ'Ñ(Ô(­7¬=¸Ñ+AÔ+AÒAÐAÝØpÕ[aÔ[mÐpÐpÐpñ
ô 
ð 	
ð7ð 7ð 7ðsð sð sð sð
/ð /ð /õ .Ø¨Ð:JÍFÌJÔLcÐ9dðñ ô €Ið #)€IÔ�hÑØ+:€IÔÐ'Ñ(Ø(4€IÔ�nÑ%Ø× Ò  Ñ/Ô/Ð/r!   FÚconversationsrÅ   rÆ   Úreturn_assistant_tokens_maskÚcontinue_final_messagerÇ   c           
      ó2  — |r/t          j        d|¦  «        st                               d¦  «         t	          |¦  «        }|�‡g }	|D ]�}
t          |
t          ¦  «        r|	                     |
¦  «         Œ-t          |
¦  «        st          j
        |
¦  «        r#|	                     t          |
¦  «        ¦  «         Œst          d¦  «        ‚nd }	|�)|D ]&}t          |t          ¦  «        st          d¦  «        ‚Œ'g }g }d}| D �]}t          |d¦  «        r|j        }|rãt!          |¦  «        }t          |t"          ¦  «        r|nd}|d                              |¦  «        x}€t          d	|› d
�¦  «        ‚||vrt          d|› d�¦  «        ‚t          |t&          t(          f¦  «        r>t+          |¦  «        D ]}d|v r|d         }|d         |z   |d<    nŒt          d¦  «        ‚n|d         |         |z   |d         |<   |r+t-          d|||	||dœ|¤Ž\  }}|                     |¦  «         n |j        d||	||dœ|¤Ž}|r¿|                     ¦   «         |vs|                     ¦   «         |vr't          d|                     ¦   «         › d|› �¦  «        ‚|                     |                     ¦   «         ¦  «        }|||t5          |¦  «        z   …         |k    r|d |…         }n|d |…                              ¦   «         }|                     |¦  «         �Œ||fS )Nz\{\%-?\s*generation\s*-?\%\}zareturn_assistant_tokens_mask==True but chat template does not contain `{% generation %}` keyword.z†Tools should either be a JSON schema, or a callable function with type hints and a docstring suitable for auto-conversion to a schema.zADocuments should be a list of dicts with 'title' and 'text' keys!zCONTINUE_FINAL_MESSAGE_TAG rÄ   Úcontentéÿÿÿÿz<continue_final_message is set but the final message has no "z" to continue!z"continue_final_message is set to "z8" but this is not an accepted field in the chat_templateÚtextz^continue_final_message is set but we could not find any text to continue in the final message!)rÊ   rÄ   rÅ   rÆ   rÇ   rÃ   a6  continue_final_message is set but the final message does not appear in the chat after applying the chat template! This can happen if the chat template deletes portions of the final message. Please verify the chat template and final message in your chat to ensure they are compatible.Final message to continue: z
Rendered chat:
r    )rŒ   r‘   ÚloggerÚwarning_oncer¹   rF   r`   r[   r   rq   Úismethodrµ   ró   Ú	TypeErrorrV   rÄ   r   r4   r8   r]   r^   ÚreversedrÐ   Úrenderrˆ   ÚrindexrX   Úrstrip)r  rÅ   rÆ   r¶   r  r  rÇ   ÚkwargsrÊ   Útool_schemasÚtoolÚdocumentÚrenderedÚall_generation_indicesÚcontinue_final_message_tagÚchatÚfinal_messageÚcontent_blockrÏ   rÍ   Útag_locs                        r"   Úrender_jinja_templater5  ò  s`  € ð $ð 
­B¬IÐ6UÐWdÑ,eÔ,eð 
Ý×ÒØoñ	
ô 	
ð 	
õ
 0°Ñ>Ô>Ðð ÐØˆØð 		ð 		ˆDÝ˜$¥Ñ%Ô%ð Ø×#Ò# DÑ)Ô)Ð)Ð)Ý˜DÑ!Ô!ð ¥WÔ%5°dÑ%;Ô%;ð Ø×#Ò#¥O°DÑ$9Ô$9Ñ:Ô:Ð:Ð:å ðPñô ð ð		ð ˆàÐØ!ð 	eð 	eˆHÝ˜h­Ñ-Ô-ð eÝÐ cÑdÔdÐdðeð €HØÐØ!>ÐØð B'ñ B'ˆÝ�4˜Ñ$Ô$ð 	!à”=ˆDØ!ð 	qÝ˜D‘>”>ˆDÝ?IÐJ`ÕbeÑ?fÔ?fÐ%uÐ%;Ð%;ÐluÐ"à!% b¤§¢Ð.DÑ!EÔ!EÐE�ÐNÝ ØyÐSiÐyÐyÐyñô ð ð &¨]Ð:Ð:Ý ð JÐ9Oð  Jð  Jð  Jñô ð õ ˜M­Dµ%¨=Ñ9Ô9ð qÝ%-¨mÑ%<Ô%<ð 	ð 	�MØ Ð.Ð.à(5°fÔ(=˜Ø0=¸fÔ0EÐHbÑ0b˜ fÑ-Ø˜ð	 /õ %Øxñô ð ð ð 48¸´8Ð<RÔ3SÐVpÑ3p��R”Ð/Ñ0Ø'ð 	Ý0Nð 1Ø"3ØØ"Ø#Ø&;ð1ð 1ð ð1ð 1Ñ-ˆMÐ-ð #×)Ò)Ð*<Ñ=Ô=Ð=Ð=à4Ð-Ô4ð ØØ"Ø#Ø&;ð	ð ð
 ðð ˆMð "ð 	AØ×#Ò#Ñ%Ô%¨]Ð:Ð:Ø*×0Ò0Ñ2Ô2¸-ÐGÐGå ðkð 3@×2EÒ2EÑ2GÔ2Gð	kð kð \ið	kð kñô ð ð $×*Ò*Ð+E×+KÒ+KÑ+MÔ+MÑNÔNˆGØ˜W wµÐ5OÑ1PÔ1PÑ'PÐPÔQÐUoÒoÐoà -¨h¨w¨hÔ 7��ð !.¨h¨w¨hÔ 7× >Ò >Ñ @Ô @�Ø�Š˜Ñ&Ô&Ð&Ñ&àÐ+Ð+Ð+r!   c                 óH   — t          | t          ¦  «        sdS d| v rd| v sdS dS )zf
    Check that input is a valid message in a chat, namely a dict with "role" and "content" keys.
    FÚroler  T)rF   r`   r   s    r"   Úis_valid_messager8  c  s:   € õ �g�tÑ$Ô$ð ØˆuØ�gÐÐ )¨wÐ"6Ð"6ØˆuØˆ4r!   c                   ó   — e Zd ZdZdefd„ZdS )ÚChata  This class is intended to just be used internally for pipelines and not exposed to users. We convert chats
    to this format because the rest of the pipeline code tends to assume that lists of messages are
    actually a batch of samples rather than messages in the same conversation.rÄ   c                 óZ   — |D ] }t          |¦  «        st          d¦  «        ‚Œ!|| _        d S )NzQWhen passing chat dicts as input, each dict must have a 'role' and 'content' key.)r8  ró   rÄ   )rn   rÄ   r  s      r"   rÙ   zChat.__init__s  sD   € Øð 	vð 	vˆGÝ# GÑ,Ô,ð vÝ Ð!tÑuÔuÐuðvà ˆŒˆˆr!   N)r   r   r   r   r`   rÙ   r    r!   r"   r:  r:  n  s;   € € € € € ðRð Rð! ð !ð !ð !ð !ð !ð !r!   r:  )NNNFFF)Mrq   rª   rŒ   rW   Úcollections.abcr   Ú
contextlibr   Úcopyr   r   Ú	functoolsr   r   Útypingr	   r
   r   r   r   r   r   Ú	packagingr   rP   r   Úimport_utilsr   r   r   Ú
get_loggerr   r"  r¼   Újinja2.exceptionsÚ
jinja2.extÚjinja2.metaÚjinja2.nodesÚjinja2.runtimer   Újinja2.sandboxr   Ú	PIL.Imager   r]   r`   r4   ÚChatTyper2   r3   r5   r)   ÚBASIC_TYPESÚcompileÚDOTALLr�   r’   ÚVERBOSEr—   r“   Ú	Exceptionr   r%   r:   r@   rƒ   r^   r¡   rµ   r¸   rÁ   rÐ   r¹   rÒ   r5  r8  r:  r    r!   r"   ú<module>rQ     s  ðð €€€Ø €€€Ø 	€	€	€	Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [à Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ Uð 
ˆÔ	˜HÑ	%Ô	%€àÐÑÔð 
Ø€M€M€MØÐÐÐØÐÐÐØÐÐÐØÐÐÐØÐÐÐØ$Ð$Ð$Ð$Ð$Ð$Ø<Ð<Ð<Ð<Ð<Ð<Ð<à€FàÐÑÔð  ØÐÐÐÐÐà��S˜#�X”Ô€ð �E˜3  c¨4¨4°©:¬:°sÐ;€à�”ÐGÈÌÑSÔS€à
ˆ"Œ*ÐHÈ"Ì)Ñ
TÔ
T€à�”
ðð „I�”
Ññô €ð ˆRŒZÐEÀrÄyÑQÔQ€
ðUð Uð Uð Uð U˜yñ Uô Uð UðUð Uð Uð Uð U 	ñ Uô Uð Uð< dð <¨t°C¸°H¬~ð <ð <ð <ð <ð$Lt˜3ð Lt 4ð Ltð Ltð Ltð Ltð^!¨Xð !¸$ð !ð !ð !ð !ðH+¨Sð +°U¸3À¹:ÀtÈdÁ{ÐTWÐZ^ÑT^Ð;^Ô5_ð +ð +ð +ð +ðBG4˜(ð G4 tð G4ð G4ð G4ð G4ðT ØðA¨3°©:ð A¸)ÀC¼.ð Að Að Añ „ñ „ðAð-ð -ð -ð$ ð9ð 9ñ „ð9ð ðF0ð F0ñ „ðF0ðV +/Ø!%Ø $Ø).Ø).Ø"'ðn,ð n,Ø˜”>ðn,à��x‘Ô  4Ñ'ðn,ð ˜$‰ðn,ð ˜‘:ð	n,ð
 #'ðn,ð ! 3™Jðn,ð  ðn,ð 	ðn,ð n,ð n,ð n,ðbð ð ð	!ð 	!ð 	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!r!   