
    *j                    4   d dl mZ d dlmZmZmZ d dlmZmZm	Z	 d dl
mZ d dlmZmZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZ d
ZddZ G d deee         d          Z edi e G d dee                               Z edded          ZdddZdS )     )annotations)	dataclassfieldreplace)AnyGenericcast)	BaseStore)	TypedDictUnpack)CONFCONFIG_KEY_RUNTIME)
get_config)
_DC_KWARGSStreamWriter)ContextT)Runtimeget_runtime_r   returnNonec                    d S N )r   s    [/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/langgraph/runtime.py_no_op_stream_writerr      s          c                  8    e Zd ZU ded<   ded<   ded<   ded<   d	S )
_RuntimeOverridesr   contextBaseStore | Nonestorer   stream_writerr   previousN)__name__
__module____qualname____annotations__r   r   r   r   r      s=         MMMMMr   r   F)totalc                      e Zd ZU dZ ed          Zded<   	  ed          Zded<   	  ee          Z	ded	<   	  ed          Z
d
ed<   	 ddZddZdS )r   at	  Convenience class that bundles run-scoped context and other runtime utilities.

    This class is injected into graph nodes and middleware. It provides access to
    `context`, `store`, `stream_writer`, and `previous`.

    !!! note "Accessing `config`"

        `Runtime` does not include `config`. To access `RunnableConfig`, you can inject
        it directly by adding a `config: RunnableConfig` parameter to your node function
        (recommended), or use `get_config()` from `langgraph.config`.

    !!! note
        `ToolRuntime` (from `langgraph.prebuilt`) is a subclass that provides similar
        functionality but is designed specifically for tools. It shares `context`, `store`,
        and `stream_writer` with `Runtime`, and adds tool-specific attributes like `config`,
        `state`, and `tool_call_id`.

    !!! version-added "Added in version v0.6.0"

    Example:

    ```python
    from typing import TypedDict
    from langgraph.graph import StateGraph
    from dataclasses import dataclass
    from langgraph.runtime import Runtime
    from langgraph.store.memory import InMemoryStore


    @dataclass
    class Context:  # (1)!
        user_id: str


    class State(TypedDict, total=False):
        response: str


    store = InMemoryStore()  # (2)!
    store.put(("users",), "user_123", {"name": "Alice"})


    def personalized_greeting(state: State, runtime: Runtime[Context]) -> State:
        '''Generate personalized greeting using runtime context and store.'''
        user_id = runtime.context.user_id  # (3)!
        name = "unknown_user"
        if runtime.store:
            if memory := runtime.store.get(("users",), user_id):
                name = memory.value["name"]

        response = f"Hello {name}! Nice to see you again."
        return {"response": response}


    graph = (
        StateGraph(state_schema=State, context_schema=Context)
        .add_node("personalized_greeting", personalized_greeting)
        .set_entry_point("personalized_greeting")
        .set_finish_point("personalized_greeting")
        .compile(store=store)
    )

    result = graph.invoke({}, context=Context(user_id="user_123"))
    print(result)
    # > {'response': 'Hello Alice! Nice to see you again.'}
    ```

    1. Define a schema for the runtime context.
    2. Create a store to persist memories and other information.
    3. Use the runtime context to access the `user_id`.
    N)defaultr   r    r!   r"   r   r#   r   r$   otherRuntime[ContextT]r   c                    t          |j        p| j        |j        p| j        |j        t          ur|j        n| j        |j        | j        n|j                  S )zMerge two runtimes together.

        If a value is not provided in the other runtime, the value from the current runtime is used.
        Nr    r"   r#   r$   )r   r    r"   r#   r   r$   )selfr,   s     r   mergezRuntime.mergev   se    
 M1T\++"*>>>  --#&+n&<T]]%.
 
 
 	
r   	overrides#Unpack[_RuntimeOverrides[ContextT]]c                    t          | fi |S )z@Replace the runtime with a new runtime with the given overrides.)r   )r0   r2   s     r   overridezRuntime.override   s     t))y)))r   )r,   r-   r   r-   )r2   r3   r   r-   )r%   r&   r'   __doc__r   r    r(   r"   r   r#   r$   r1   r5   r   r   r   r   r      s         F FP d+++G++++5 $eD111E1111C"'%0D"E"E"EMEEEE4E$'''H''''

 
 
 
* * * * * *r   r   Nr/   context_schematype[ContextT] | Noner-   c                    t          t          t                   t                      t                                       t                              }|S )zGet the runtime for the current graph run.

    Args:
        context_schema: Optional schema used for type hinting the return type of the runtime.

    Returns:
        The runtime for the current graph run.
    )r	   r   r   r   r   getr   )r7   runtimes     r   r   r      s5     78$jll4&8&<&<=O&P&PQQGNr   )r   r   r   r   r   r   )r7   r8   r   r-   )
__future__r   dataclassesr   r   r   typingr   r   r	   langgraph.store.baser
   typing_extensionsr   r   langgraph._internal._constantsr   r   langgraph.configr   langgraph.typesr   r   langgraph.typingr   __all__r   r   r   DEFAULT_RUNTIMEr   r   r   r   <module>rG      s   " " " " " " 1 1 1 1 1 1 1 1 1 1 % % % % % % % % % % * * * * * * / / / / / / / / C C C C C C C C ' ' ' ' ' ' 4 4 4 4 4 4 4 4 % % % % % %
$ . - - -    	78#4E     Zl* l* l* l* l*gh l* l* l*^ '
&	        r   