
    dh`                         S r SSKrSSKJrJrJr  SSKJr  SSKJ	r	  SSK
Jr  SSKJr  SSKJr  S	\4S
 jr " S S\	5      rg)zCallback handler for Context AI    N)AnyDictList)UUID)BaseCallbackHandler)BaseMessage)	LLMResult)guard_importreturnc            
          [        SSS9[        SSS9R                  [        SSS9R                  [        SSS9R                  [        SSS9R                  [        SSS9R
                  4$ )z Import the `getcontext` package.
getcontextzpython-context)pip_namezgetcontext.tokenzgetcontext.generated.models)r
   
CredentialConversationMessageMessageRoleRating     f/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/callbacks/context_callback.pyimport_contextr      su     	\,<='2BCNN)4D	

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

+2=MNUU r   c            
           \ rS rSrSrSS\S\S\SS4S jjrS	\	\\4   S
\
\
\      S\S\S\4
S jrS\S\SS4S jrS	\	\\4   S\	\\4   S\SS4S jrS\	\\4   S\SS4S jrSS jrSrg)ContextCallbackHandler   a3  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")
tokenverbosekwargsr   Nc                 V   [        5       u  U l        U l        U l        U l        U l        U l        U=(       d(    [        R                  R                  S5      =(       d    SnU R                  R                  U R                  U5      S9U l        S U l        S U l        / U l        0 U l        g )NCONTEXT_TOKEN )
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__ContextCallbackHandler.__init__Y   s     	
LO## >8>Bll--9O-P #%(*r   
serializedr.   run_idc                   UR                  S0 5      R                  SS5      nUb  XPR                  S'   [        U5      S:X  a  gUS    H  nU R                  R                  nUR
                  S:X  a  U R                  R                  nOMUR
                  S:X  a  U R                  R                  nO&UR
                  S:X  a  U R                  R                  nU R                  R                  U R                  UR                  US95        M     g)	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)r0   r3   r.   r4   r   r-   r<   r=   s           r   on_chat_model_start*ContextCallbackHandler.on_chat_model_startn   s     JJ2B7;;GTJ	 %.MM'"x=A{G**11D||w&..33)..55%..88MM  ""#OO #  #r   responsec                 f   [        UR                  5      S:X  d  [        UR                  S   5      S:X  a  gU R                  (       dj  UR                  S   S   nU R                  R	                  U R                  UR                  U R                  R                  S95        U R                  5         gg)zRun when LLM ends.r   Nr;   )
r>   generationsr,   r.   rC   r$   textr%   rB   _log_conversation)r0   rG   r   
generations       r   
on_llm_end!ContextCallbackHandler.on_llm_end   s    x##$)S1E1Ea1H-IQ-N  !--a03JMM  ""&OO00:: #  ""$ !r   inputsc                 2    UR                  SS5      U l        g)zRun when chain starts.r4   N)r)   r,   )r0   r3   rO   r   s       r   on_chain_start%ContextCallbackHandler.on_chain_start   s     #JJx6r   outputsc                     U R                   R                  U R                  US   U R                  R                  S95        U R                  5         SU l        g)zRun when chain ends.rJ   r;   N)r.   rC   r$   r%   rB   rK   r,   )r0   rS   r   s      r   on_chain_end#ContextCallbackHandler.on_chain_end   sS    ,,66  	
 	  r   c                     [        U R                  5      S:X  a  gU R                  R                  R	                  SU R                  U R                  U R                  S90S9  / U l        0 U l        g)z(Log the conversation to the context API.r   Nconversation)r.   r/   )body)r>   r.   r+   logconversation_upsertr#   r/   )r0   s    r   rK   (ContextCallbackHandler._log_conversation   si    t}}"++ 7 7!]]!]] !8 ! 	, 	
 r   )r,   r+   r"   r#   r!   r-   r$   r%   r.   r/   r&   )r    F)r   N)__name__
__module____qualname____firstlineno____doc__strboolr   r1   r   r   r   r   rE   r	   rM   rQ   rU   rK   __static_attributes__r   r   r   r   r      s    9v+c + + +QU +*cN tK()
   
@%9 % % % 7sCx.726sCx.7LO7	7!DcN !c !d !r   r   )ra   r'   typingr   r   r   uuidr   langchain_core.callbacksr   langchain_core.messagesr   langchain_core.outputsr	   langchain_core.utilsr
   r   r   r   r   r   <module>rk      s;    % 	 " "  8 / , -  c0 cr   