
    Ng`                         d Z ddlZddlmZmZ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	efd
Z G d de	          ZdS )zCallback handler for Context AI    N)AnyDictList)UUID)BaseCallbackHandler)BaseMessage)	LLMResult)guard_importreturnc            	          t          dd          t          dd          j        t          dd          j        t          dd          j        t          dd          j        t          dd          j        fS )z Import the `getcontext` package.
getcontextzpython-context)pip_namezgetcontext.tokenzgetcontext.generated.models)r
   
CredentialConversationMessageMessageRoleRating     j/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/callbacks/context_callback.pyimport_contextr      s     	\,<==='2BCCCN)4D	
 	
 	

2=MNNNV)4D	
 	
 	

2=MNNNU r   c            
           e Zd ZdZddedededdfd	Zd
eeef         de	e	e
                  dededef
dZdededdfdZd
eeef         deeef         deddfdZdeeef         deddfdZddZdS )ContextCallbackHandlera	  Callback Handler that records transcripts to the Context service.

     (https://context.ai).

    Keyword Args:
        token (optional): The token with which to authenticate requests to Context.
            Visit https://with.context.ai/settings to generate a token.
            If not provided, the value of the `CONTEXT_TOKEN` environment
            variable will be used.

    Raises:
        ImportError: if the `context-python` package is not installed.

    Chat Example:
        >>> from langchain_community.llms import ChatOpenAI
        >>> from langchain_community.callbacks import ContextCallbackHandler
        >>> context_callback = ContextCallbackHandler(
        ...     token="<CONTEXT_TOKEN_HERE>",
        ... )
        >>> chat = ChatOpenAI(
        ...     temperature=0,
        ...     headers={"user_id": "123"},
        ...     callbacks=[context_callback],
        ...     openai_api_key="API_KEY_HERE",
        ... )
        >>> messages = [
        ...     SystemMessage(content="You translate English to French."),
        ...     HumanMessage(content="I love programming with LangChain."),
        ... ]
        >>> chat.invoke(messages)

    Chain Example:
        >>> from langchain.chains import LLMChain
        >>> from langchain_community.chat_models import ChatOpenAI
        >>> from langchain_community.callbacks import ContextCallbackHandler
        >>> context_callback = ContextCallbackHandler(
        ...     token="<CONTEXT_TOKEN_HERE>",
        ... )
        >>> human_message_prompt = HumanMessagePromptTemplate(
        ...     prompt=PromptTemplate(
        ...         template="What is a good name for a company that makes {product}?",
        ...         input_variables=["product"],
        ...    ),
        ... )
        >>> chat_prompt_template = ChatPromptTemplate.from_messages(
        ...   [human_message_prompt]
        ... )
        >>> callback = ContextCallbackHandler(token)
        >>> # Note: the same callback object must be shared between the
        ...   LLM and the chain.
        >>> chat = ChatOpenAI(temperature=0.9, callbacks=[callback])
        >>> chain = LLMChain(
        ...   llm=chat,
        ...   prompt=chat_prompt_template,
        ...   callbacks=[callback]
        ... )
        >>> chain.run("colorful socks")
     Ftokenverbosekwargsr   Nc                 P   t                      \  | _        | _        | _        | _        | _        | _        |p t          j        	                    d          pd}| j        
                    |                     |                    | _        d | _        d | _        g | _        i | _        d S )NCONTEXT_TOKENr   )
credential)r   contextr    conversation_modelmessage_modelmessage_role_modelrating_modelosenvironget
ContextAPIclientchain_run_id	llm_modelmessagesmetadata)selfr   r   r   s       r   __init__zContextCallbackHandler.__init__Y   s     	
LO## >88>Bl--9O9O-PP #%(*r   
serializedr-   run_idc                   |                     di                                dd          }|
|| j        d<   t          |          dk    rdS |d         D ]}| j        j        }|j        dk    r| j        j        }n/|j        dk    r| j        j        }n|j        dk    r| j        j        }| j        	                    | 
                    |j        |                     dS )	z#Run when the chat model is started.invocation_paramsmodelNr   humansystemaimessagerole)r(   r.   lenr$   SYSTEMtypeUSER	ASSISTANTr-   appendr#   content)r/   r1   r-   r2   r   r,   r:   r;   s           r   on_chat_model_startz*ContextCallbackHandler.on_chat_model_startn   s    JJ2B77;;GTJJ	 %.DM'"x==AF{ 	 	G*1D|w&&.3)).5%%.8M  ""#O #     	 	r   responsec                 R   t          |j                  dk    st          |j        d                   dk    rdS | j        sg|j        d         d         }| j                            |                     |j        | j        j                             | 	                                 dS dS )zRun when LLM ends.r   Nr9   )
r<   generationsr+   r-   rA   r#   textr$   r@   _log_conversation)r/   rD   r   
generations       r   
on_llm_endz!ContextCallbackHandler.on_llm_end   s    x#$$))S1Ea1H-I-IQ-N-NF  		%!-a03JM  ""&O0: #     ""$$$$$		% 		%r   inputsc                 <    |                     dd          | _        dS )zRun when chain starts.r2   N)r(   r+   )r/   r1   rK   r   s       r   on_chain_startz%ContextCallbackHandler.on_chain_start   s      #JJx66r   outputsc                     | j                             |                     |d         | j        j                             |                                  d| _        dS )zRun when chain ends.rG   r9   N)r-   rA   r#   r$   r@   rH   r+   )r/   rN   r   s      r   on_chain_endz#ContextCallbackHandler.on_chain_end   sf    ,6   	
 	
 	
 	    r   c                     t          | j                  dk    rdS | j        j                            d|                     | j        | j                  i           g | _        i | _        dS )z(Log the conversation to the context API.r   Nconversation)r-   r.   )body)r<   r-   r*   logconversation_upsertr"   r.   )r/   s    r   rH   z(ContextCallbackHandler._log_conversation   sz    t}""F++ 7 7!]!] !8 ! ! 	, 	
 	
 	
 r   )r   F)r   N)__name__
__module____qualname____doc__strboolr   r0   r   r   r   r   rC   r	   rJ   rM   rP   rH   r   r   r   r   r      s^       9 9v+ +c + + +QU + + + +*cN tK()
   
   @%9 % % % % % % 7sCx.726sCx.7LO7	7 7 7 7!DcN !c !d ! ! ! !     r   r   )rY   r&   typingr   r   r   uuidr   langchain_core.callbacksr   langchain_core.messagesr   langchain_core.outputsr	   langchain_core.utilsr
   r   r   r   r   r   <module>rb      s    % % 				 " " " " " " " " " "       8 8 8 8 8 8 / / / / / / , , , , , , - - - - - -     c c c c c0 c c c c cr   