o
    |!g 
                     @   sR   d dl Z d dlmZmZ d dlmZ d dlmZ dZe 	dZ
G dd deZdS )	    N)TemplateSyntaxErrornodes)	Extension)chat_message_from_text)systemuser	assistantz)<content_block>((?s:.)*)<\/content_block>c                   @   s&   e Zd ZdZdhZdd Zdd ZdS )ChatExtensionz
    `chat` can be used to render prompt text as structured ChatMessage objects.

    Example:
        ```
        {% chat role="system" %}
        You are a helpful assistant.
        {% endchat %}
        ```
    chatc                 C   s   t |jj}g }|jjjdkr|t |j |jjjdksd| d}z|\}}}W n ty8   t||d w |jdksC|jdkrHt|||jt	vr`d
t	}d| d| d	}	t|	|t|jg}
|jd
dd}t| d|
g g ||S )N	block_endz(Invalid syntax for chat attribute, got 'z', expected role="value"role=,zUnknown role type 'z', use one of ())zname:endchatT)drop_needle_store_chat_messages)nextstreamlinenocurrenttypeappend
ValueErrorr   valueSUPPORTED_TYPESjoinr   Constparse_statements	CallBlockcall_method
set_lineno)selfparserr   gathered	error_msg	attr_nameattr_assign
attr_valuetypesmsgargsbody r,   W/mnt/skqttb/ctump_chatbot/chatbot/lib/python3.10/site-packages/banks/extensions/chat.pyparse   s(   



zChatExtension.parsec                 C   s   t || d}|jddd S )z"
        Helper callback.
        )r   contentT)exclude_none
)r   model_dump_json)r!   r   callercmr,   r,   r-   r   D   s   z"ChatExtension._store_chat_messagesN)__name__
__module____qualname____doc__tagsr.   r   r,   r,   r,   r-   r	      s
    &r	   )rejinja2r   r   
jinja2.extr   banks.typesr   r   compileCONTENT_BLOCK_REGEXr	   r,   r,   r,   r-   <module>   s   
