lionagi 0.0.305__py3-none-any.whl → 0.0.307__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lionagi/__init__.py +2 -5
 - lionagi/core/__init__.py +7 -4
 - lionagi/core/agent/__init__.py +3 -0
 - lionagi/core/agent/base_agent.py +46 -0
 - lionagi/core/branch/__init__.py +4 -0
 - lionagi/core/branch/base/__init__.py +0 -0
 - lionagi/core/branch/base_branch.py +100 -78
 - lionagi/core/branch/branch.py +22 -34
 - lionagi/core/branch/branch_flow_mixin.py +3 -7
 - lionagi/core/branch/executable_branch.py +192 -0
 - lionagi/core/branch/util.py +77 -162
 - lionagi/core/direct/__init__.py +13 -0
 - lionagi/core/direct/parallel_predict.py +127 -0
 - lionagi/core/direct/parallel_react.py +0 -0
 - lionagi/core/direct/parallel_score.py +0 -0
 - lionagi/core/direct/parallel_select.py +0 -0
 - lionagi/core/direct/parallel_sentiment.py +0 -0
 - lionagi/core/direct/predict.py +174 -0
 - lionagi/core/direct/react.py +33 -0
 - lionagi/core/direct/score.py +163 -0
 - lionagi/core/direct/select.py +144 -0
 - lionagi/core/direct/sentiment.py +51 -0
 - lionagi/core/direct/utils.py +83 -0
 - lionagi/core/flow/__init__.py +0 -3
 - lionagi/core/flow/monoflow/{mono_react.py → ReAct.py} +52 -9
 - lionagi/core/flow/monoflow/__init__.py +9 -0
 - lionagi/core/flow/monoflow/{mono_chat.py → chat.py} +11 -11
 - lionagi/core/flow/monoflow/{mono_chat_mixin.py → chat_mixin.py} +33 -27
 - lionagi/core/flow/monoflow/{mono_followup.py → followup.py} +7 -6
 - lionagi/core/flow/polyflow/__init__.py +1 -0
 - lionagi/core/flow/polyflow/{polychat.py → chat.py} +15 -3
 - lionagi/core/mail/__init__.py +8 -0
 - lionagi/core/mail/mail_manager.py +88 -40
 - lionagi/core/mail/schema.py +32 -6
 - lionagi/core/messages/__init__.py +3 -0
 - lionagi/core/messages/schema.py +56 -25
 - lionagi/core/prompt/__init__.py +0 -0
 - lionagi/core/prompt/prompt_template.py +0 -0
 - lionagi/core/schema/__init__.py +7 -5
 - lionagi/core/schema/action_node.py +29 -0
 - lionagi/core/schema/base_mixin.py +56 -59
 - lionagi/core/schema/base_node.py +35 -38
 - lionagi/core/schema/condition.py +24 -0
 - lionagi/core/schema/data_logger.py +98 -98
 - lionagi/core/schema/data_node.py +19 -19
 - lionagi/core/schema/prompt_template.py +0 -0
 - lionagi/core/schema/structure.py +293 -190
 - lionagi/core/session/__init__.py +1 -3
 - lionagi/core/session/session.py +196 -214
 - lionagi/core/tool/tool_manager.py +95 -103
 - lionagi/integrations/__init__.py +1 -3
 - lionagi/integrations/bridge/langchain_/documents.py +17 -18
 - lionagi/integrations/bridge/langchain_/langchain_bridge.py +14 -14
 - lionagi/integrations/bridge/llamaindex_/llama_index_bridge.py +22 -22
 - lionagi/integrations/bridge/llamaindex_/node_parser.py +12 -12
 - lionagi/integrations/bridge/llamaindex_/reader.py +11 -11
 - lionagi/integrations/bridge/llamaindex_/textnode.py +7 -7
 - lionagi/integrations/config/openrouter_configs.py +0 -1
 - lionagi/integrations/provider/oai.py +26 -26
 - lionagi/integrations/provider/services.py +38 -38
 - lionagi/libs/__init__.py +34 -1
 - lionagi/libs/ln_api.py +211 -221
 - lionagi/libs/ln_async.py +53 -60
 - lionagi/libs/ln_convert.py +118 -120
 - lionagi/libs/ln_dataframe.py +32 -33
 - lionagi/libs/ln_func_call.py +334 -342
 - lionagi/libs/ln_nested.py +99 -107
 - lionagi/libs/ln_parse.py +175 -158
 - lionagi/libs/sys_util.py +52 -52
 - lionagi/tests/test_core/test_base_branch.py +427 -427
 - lionagi/tests/test_core/test_branch.py +292 -292
 - lionagi/tests/test_core/test_mail_manager.py +57 -57
 - lionagi/tests/test_core/test_session.py +254 -266
 - lionagi/tests/test_core/test_session_base_util.py +299 -300
 - lionagi/tests/test_core/test_tool_manager.py +70 -74
 - lionagi/tests/test_libs/test_nested.py +2 -7
 - lionagi/tests/test_libs/test_parse.py +2 -2
 - lionagi/version.py +1 -1
 - {lionagi-0.0.305.dist-info → lionagi-0.0.307.dist-info}/METADATA +4 -2
 - lionagi-0.0.307.dist-info/RECORD +115 -0
 - lionagi-0.0.305.dist-info/RECORD +0 -94
 - {lionagi-0.0.305.dist-info → lionagi-0.0.307.dist-info}/LICENSE +0 -0
 - {lionagi-0.0.305.dist-info → lionagi-0.0.307.dist-info}/WHEEL +0 -0
 - {lionagi-0.0.305.dist-info → lionagi-0.0.307.dist-info}/top_level.txt +0 -0
 
    
        lionagi/core/messages/schema.py
    CHANGED
    
    | 
         @@ -1,11 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            from enum import Enum
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            from lionagi.libs import  
     | 
| 
       4 
     | 
    
         
            -
            from  
     | 
| 
      
 3 
     | 
    
         
            +
            from lionagi.libs import nested, convert
         
     | 
| 
      
 4 
     | 
    
         
            +
            from ..schema import DataNode
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
            _message_fields = ["node_id", "timestamp", "role", "sender", "recipient", "content"]
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
            _message_fields = ["node_id", "timestamp", "role", "sender", "content"]
         
     | 
| 
       9 
8 
     | 
    
         | 
| 
       10 
9 
     | 
    
         
             
            # ToDo: actually implement the new message classes
         
     | 
| 
       11 
10 
     | 
    
         | 
| 
         @@ -99,13 +98,14 @@ class BaseMessage(DataNode): 
     | 
|
| 
       99 
98 
     | 
    
         
             
                Represents a message in a chatbot-like system, inheriting from BaseNode.
         
     | 
| 
       100 
99 
     | 
    
         | 
| 
       101 
100 
     | 
    
         
             
                Attributes:
         
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
             
     | 
| 
      
 101 
     | 
    
         
            +
                        role (str | None): The role of the entity sending the message, e.g., 'user', 'system'.
         
     | 
| 
      
 102 
     | 
    
         
            +
                        sender (str | None): The identifier of the sender of the message.
         
     | 
| 
      
 103 
     | 
    
         
            +
                        content (Any): The actual content of the message.
         
     | 
| 
       105 
104 
     | 
    
         
             
                """
         
     | 
| 
       106 
105 
     | 
    
         | 
| 
       107 
106 
     | 
    
         
             
                role: str | None = None
         
     | 
| 
       108 
107 
     | 
    
         
             
                sender: str | None = None
         
     | 
| 
      
 108 
     | 
    
         
            +
                recipient: str | None = None
         
     | 
| 
       109 
109 
     | 
    
         | 
| 
       110 
110 
     | 
    
         
             
                @property
         
     | 
| 
       111 
111 
     | 
    
         
             
                def msg(self) -> dict:
         
     | 
| 
         @@ -113,7 +113,7 @@ class BaseMessage(DataNode): 
     | 
|
| 
       113 
113 
     | 
    
         
             
                    Constructs and returns a dictionary representation of the message.
         
     | 
| 
       114 
114 
     | 
    
         | 
| 
       115 
115 
     | 
    
         
             
                    Returns:
         
     | 
| 
       116 
     | 
    
         
            -
             
     | 
| 
      
 116 
     | 
    
         
            +
                            A dictionary representation of the message with 'role' and 'content' keys.
         
     | 
| 
       117 
117 
     | 
    
         
             
                    """
         
     | 
| 
       118 
118 
     | 
    
         
             
                    return self._to_message()
         
     | 
| 
       119 
119 
     | 
    
         | 
| 
         @@ -123,7 +123,7 @@ class BaseMessage(DataNode): 
     | 
|
| 
       123 
123 
     | 
    
         
             
                    Gets the 'content' field of the message.
         
     | 
| 
       124 
124 
     | 
    
         | 
| 
       125 
125 
     | 
    
         
             
                    Returns:
         
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
      
 126 
     | 
    
         
            +
                            The 'content' part of the message.
         
     | 
| 
       127 
127 
     | 
    
         
             
                    """
         
     | 
| 
       128 
128 
     | 
    
         
             
                    return self.msg["content"]
         
     | 
| 
       129 
129 
     | 
    
         | 
| 
         @@ -132,14 +132,13 @@ class BaseMessage(DataNode): 
     | 
|
| 
       132 
132 
     | 
    
         
             
                    Constructs and returns a dictionary representation of the message.
         
     | 
| 
       133 
133 
     | 
    
         | 
| 
       134 
134 
     | 
    
         
             
                    Returns:
         
     | 
| 
       135 
     | 
    
         
            -
             
     | 
| 
      
 135 
     | 
    
         
            +
                            dict: A dictionary representation of the message with 'role' and 'content' keys.
         
     | 
| 
       136 
136 
     | 
    
         
             
                    """
         
     | 
| 
       137 
     | 
    
         
            -
                     
     | 
| 
       138 
     | 
    
         
            -
                    return out
         
     | 
| 
      
 137 
     | 
    
         
            +
                    return {"role": self.role, "content": convert.to_str(self.content)}
         
     | 
| 
       139 
138 
     | 
    
         | 
| 
       140 
139 
     | 
    
         
             
                def __str__(self):
         
     | 
| 
       141 
140 
     | 
    
         
             
                    content_preview = (
         
     | 
| 
       142 
     | 
    
         
            -
                         
     | 
| 
      
 141 
     | 
    
         
            +
                        f"{str(self.content)[:75]}..."
         
     | 
| 
       143 
142 
     | 
    
         
             
                        if self.content and len(self.content) > 75
         
     | 
| 
       144 
143 
     | 
    
         
             
                        else str(self.content)
         
     | 
| 
       145 
144 
     | 
    
         
             
                    )
         
     | 
| 
         @@ -160,9 +159,13 @@ class Instruction(BaseMessage): 
     | 
|
| 
       160 
159 
     | 
    
         
             
                    context=None,
         
     | 
| 
       161 
160 
     | 
    
         
             
                    sender: str | None = None,
         
     | 
| 
       162 
161 
     | 
    
         
             
                    output_fields=None,
         
     | 
| 
       163 
     | 
    
         
            -
             
     | 
| 
      
 162 
     | 
    
         
            +
                    recipient=None,
         
     | 
| 
      
 163 
     | 
    
         
            +
                ):  # sourcery skip: avoid-builtin-shadow
         
     | 
| 
       164 
164 
     | 
    
         
             
                    super().__init__(
         
     | 
| 
       165 
     | 
    
         
            -
                        role="user", 
     | 
| 
      
 165 
     | 
    
         
            +
                        role="user",
         
     | 
| 
      
 166 
     | 
    
         
            +
                        sender=sender or "user",
         
     | 
| 
      
 167 
     | 
    
         
            +
                        content={"instruction": instruction},
         
     | 
| 
      
 168 
     | 
    
         
            +
                        recipient=recipient or "assistant",
         
     | 
| 
       166 
169 
     | 
    
         
             
                    )
         
     | 
| 
       167 
170 
     | 
    
         
             
                    if context:
         
     | 
| 
       168 
171 
     | 
    
         
             
                        self.content.update({"context": context})
         
     | 
| 
         @@ -176,6 +179,10 @@ class Instruction(BaseMessage): 
     | 
|
| 
       176 
179 
     | 
    
         
             
                        """
         
     | 
| 
       177 
180 
     | 
    
         
             
                        self.content.update({"response_format": format})
         
     | 
| 
       178 
181 
     | 
    
         | 
| 
      
 182 
     | 
    
         
            +
                @property
         
     | 
| 
      
 183 
     | 
    
         
            +
                def instruct(self):
         
     | 
| 
      
 184 
     | 
    
         
            +
                    return self.content["instruction"]
         
     | 
| 
      
 185 
     | 
    
         
            +
             
     | 
| 
       179 
186 
     | 
    
         | 
| 
       180 
187 
     | 
    
         
             
            class System(BaseMessage):
         
     | 
| 
       181 
188 
     | 
    
         
             
                """
         
     | 
| 
         @@ -184,11 +191,20 @@ class System(BaseMessage): 
     | 
|
| 
       184 
191 
     | 
    
         
             
                Designed for messages containing system information, this class sets the message role to 'system'.
         
     | 
| 
       185 
192 
     | 
    
         
             
                """
         
     | 
| 
       186 
193 
     | 
    
         | 
| 
       187 
     | 
    
         
            -
                def __init__( 
     | 
| 
      
 194 
     | 
    
         
            +
                def __init__(
         
     | 
| 
      
 195 
     | 
    
         
            +
                    self, system: dict | list | str, sender: str | None = None, recipient=None
         
     | 
| 
      
 196 
     | 
    
         
            +
                ):
         
     | 
| 
       188 
197 
     | 
    
         
             
                    super().__init__(
         
     | 
| 
       189 
     | 
    
         
            -
                        role="system", 
     | 
| 
      
 198 
     | 
    
         
            +
                        role="system",
         
     | 
| 
      
 199 
     | 
    
         
            +
                        sender=sender or "system",
         
     | 
| 
      
 200 
     | 
    
         
            +
                        content={"system_info": system},
         
     | 
| 
      
 201 
     | 
    
         
            +
                        recipient=recipient or "assistant",
         
     | 
| 
       190 
202 
     | 
    
         
             
                    )
         
     | 
| 
       191 
203 
     | 
    
         | 
| 
      
 204 
     | 
    
         
            +
                @property
         
     | 
| 
      
 205 
     | 
    
         
            +
                def system_info(self):
         
     | 
| 
      
 206 
     | 
    
         
            +
                    return self.content["system_info"]
         
     | 
| 
      
 207 
     | 
    
         
            +
             
     | 
| 
       192 
208 
     | 
    
         | 
| 
       193 
209 
     | 
    
         
             
            class Response(BaseMessage):
         
     | 
| 
       194 
210 
     | 
    
         
             
                """
         
     | 
| 
         @@ -199,7 +215,9 @@ class Response(BaseMessage): 
     | 
|
| 
       199 
215 
     | 
    
         | 
| 
       200 
216 
     | 
    
         
             
                """
         
     | 
| 
       201 
217 
     | 
    
         | 
| 
       202 
     | 
    
         
            -
                def __init__( 
     | 
| 
      
 218 
     | 
    
         
            +
                def __init__(
         
     | 
| 
      
 219 
     | 
    
         
            +
                    self, response: dict | list | str, sender: str | None = None, recipient=None
         
     | 
| 
      
 220 
     | 
    
         
            +
                ) -> None:
         
     | 
| 
       203 
221 
     | 
    
         
             
                    content_key = ""
         
     | 
| 
       204 
222 
     | 
    
         
             
                    try:
         
     | 
| 
       205 
223 
     | 
    
         
             
                        response = response["message"]
         
     | 
| 
         @@ -207,6 +225,7 @@ class Response(BaseMessage): 
     | 
|
| 
       207 
225 
     | 
    
         
             
                            content_ = self._handle_action_request(response)
         
     | 
| 
       208 
226 
     | 
    
         
             
                            sender = sender or "action_request"
         
     | 
| 
       209 
227 
     | 
    
         
             
                            content_key = content_key or "action_request"
         
     | 
| 
      
 228 
     | 
    
         
            +
                            recipient = recipient or "action"
         
     | 
| 
       210 
229 
     | 
    
         | 
| 
       211 
230 
     | 
    
         
             
                        else:
         
     | 
| 
       212 
231 
     | 
    
         
             
                            try:
         
     | 
| 
         @@ -214,32 +233,44 @@ class Response(BaseMessage): 
     | 
|
| 
       214 
233 
     | 
    
         
             
                                    content_ = convert.to_dict(response["content"])["tool_uses"]
         
     | 
| 
       215 
234 
     | 
    
         
             
                                    content_key = content_key or "action_request"
         
     | 
| 
       216 
235 
     | 
    
         
             
                                    sender = sender or "action_request"
         
     | 
| 
      
 236 
     | 
    
         
            +
                                    recipient = recipient or "action"
         
     | 
| 
      
 237 
     | 
    
         
            +
             
     | 
| 
       217 
238 
     | 
    
         
             
                                elif "response" in convert.to_dict(response["content"]):
         
     | 
| 
       218 
239 
     | 
    
         
             
                                    sender = sender or "assistant"
         
     | 
| 
       219 
240 
     | 
    
         
             
                                    content_key = content_key or "response"
         
     | 
| 
       220 
241 
     | 
    
         
             
                                    content_ = convert.to_dict(response["content"])["response"]
         
     | 
| 
      
 242 
     | 
    
         
            +
                                    recipient = recipient or "user"
         
     | 
| 
      
 243 
     | 
    
         
            +
             
     | 
| 
       221 
244 
     | 
    
         
             
                                elif "action_request" in convert.to_dict(response["content"]):
         
     | 
| 
       222 
245 
     | 
    
         
             
                                    sender = sender or "action_request"
         
     | 
| 
       223 
246 
     | 
    
         
             
                                    content_key = content_key or "action_request"
         
     | 
| 
       224 
247 
     | 
    
         
             
                                    content_ = convert.to_dict(response["content"])[
         
     | 
| 
       225 
248 
     | 
    
         
             
                                        "action_request"
         
     | 
| 
       226 
249 
     | 
    
         
             
                                    ]
         
     | 
| 
      
 250 
     | 
    
         
            +
                                    recipient = recipient or "action"
         
     | 
| 
      
 251 
     | 
    
         
            +
             
     | 
| 
       227 
252 
     | 
    
         
             
                                else:
         
     | 
| 
       228 
253 
     | 
    
         
             
                                    content_ = response["content"]
         
     | 
| 
       229 
254 
     | 
    
         
             
                                    content_key = content_key or "response"
         
     | 
| 
       230 
255 
     | 
    
         
             
                                    sender = sender or "assistant"
         
     | 
| 
       231 
     | 
    
         
            -
             
     | 
| 
      
 256 
     | 
    
         
            +
                                    recipient = recipient or "user"
         
     | 
| 
      
 257 
     | 
    
         
            +
                            except Exception:
         
     | 
| 
       232 
258 
     | 
    
         
             
                                content_ = response["content"]
         
     | 
| 
       233 
259 
     | 
    
         
             
                                content_key = content_key or "response"
         
     | 
| 
       234 
260 
     | 
    
         
             
                                sender = sender or "assistant"
         
     | 
| 
      
 261 
     | 
    
         
            +
                                recipient = recipient or "user"
         
     | 
| 
       235 
262 
     | 
    
         | 
| 
       236 
     | 
    
         
            -
                    except:
         
     | 
| 
      
 263 
     | 
    
         
            +
                    except Exception:
         
     | 
| 
       237 
264 
     | 
    
         
             
                        sender = sender or "action_response"
         
     | 
| 
       238 
265 
     | 
    
         
             
                        content_ = response
         
     | 
| 
       239 
266 
     | 
    
         
             
                        content_key = content_key or "action_response"
         
     | 
| 
      
 267 
     | 
    
         
            +
                        recipient = recipient or "assistant"
         
     | 
| 
       240 
268 
     | 
    
         | 
| 
       241 
269 
     | 
    
         
             
                    super().__init__(
         
     | 
| 
       242 
     | 
    
         
            -
                        role="assistant", 
     | 
| 
      
 270 
     | 
    
         
            +
                        role="assistant",
         
     | 
| 
      
 271 
     | 
    
         
            +
                        sender=sender,
         
     | 
| 
      
 272 
     | 
    
         
            +
                        content={content_key: content_},
         
     | 
| 
      
 273 
     | 
    
         
            +
                        recipient=recipient,
         
     | 
| 
       243 
274 
     | 
    
         
             
                    )
         
     | 
| 
       244 
275 
     | 
    
         | 
| 
       245 
276 
     | 
    
         
             
                @staticmethod
         
     | 
| 
         @@ -248,13 +279,13 @@ class Response(BaseMessage): 
     | 
|
| 
       248 
279 
     | 
    
         
             
                    Processes an action request response and extracts relevant information.
         
     | 
| 
       249 
280 
     | 
    
         | 
| 
       250 
281 
     | 
    
         
             
                    Args:
         
     | 
| 
       251 
     | 
    
         
            -
             
     | 
| 
      
 282 
     | 
    
         
            +
                            response (dict): The response dictionary containing tool calls and other information.
         
     | 
| 
       252 
283 
     | 
    
         | 
| 
       253 
284 
     | 
    
         
             
                    Returns:
         
     | 
| 
       254 
     | 
    
         
            -
             
     | 
| 
      
 285 
     | 
    
         
            +
                            list: A list of dictionaries, each representing a function call with action and arguments.
         
     | 
| 
       255 
286 
     | 
    
         | 
| 
       256 
287 
     | 
    
         
             
                    Raises:
         
     | 
| 
       257 
     | 
    
         
            -
             
     | 
| 
      
 288 
     | 
    
         
            +
                            ValueError: If the response does not conform to the expected format for action requests.
         
     | 
| 
       258 
289 
     | 
    
         
             
                    """
         
     | 
| 
       259 
290 
     | 
    
         
             
                    try:
         
     | 
| 
       260 
291 
     | 
    
         
             
                        tool_count = 0
         
     | 
| 
         @@ -267,7 +298,7 @@ class Response(BaseMessage): 
     | 
|
| 
       267 
298 
     | 
    
         
             
                                _path2 = ["tool_calls", tool_count, "function", "arguments"]
         
     | 
| 
       268 
299 
     | 
    
         | 
| 
       269 
300 
     | 
    
         
             
                                func_content = {
         
     | 
| 
       270 
     | 
    
         
            -
                                    "action":  
     | 
| 
      
 301 
     | 
    
         
            +
                                    "action": f"action_{nested.nget(response, _path1)}",
         
     | 
| 
       271 
302 
     | 
    
         
             
                                    "arguments": nested.nget(response, _path2),
         
     | 
| 
       272 
303 
     | 
    
         
             
                                }
         
     | 
| 
       273 
304 
     | 
    
         
             
                                func_list.append(func_content)
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     | 
    
        lionagi/core/schema/__init__.py
    CHANGED
    
    | 
         @@ -1,17 +1,19 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            from .base_node import BaseNode, BaseRelatableNode, Tool
         
     | 
| 
       2 
     | 
    
         
            -
            from .data_logger import DataLogger, DLog
         
     | 
| 
      
 1 
     | 
    
         
            +
            from .base_node import BaseNode, BaseRelatableNode, Tool, TOOL_TYPE
         
     | 
| 
       3 
2 
     | 
    
         
             
            from .data_node import DataNode
         
     | 
| 
      
 3 
     | 
    
         
            +
            from .data_logger import DLog, DataLogger
         
     | 
| 
       4 
4 
     | 
    
         
             
            from .structure import Relationship, Graph, Structure
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 5 
     | 
    
         
            +
            from .action_node import ActionNode
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            __all__ = [
         
     | 
| 
       8 
     | 
    
         
            -
                "DLog",
         
     | 
| 
       9 
8 
     | 
    
         
             
                "BaseNode",
         
     | 
| 
       10 
9 
     | 
    
         
             
                "BaseRelatableNode",
         
     | 
| 
       11 
10 
     | 
    
         
             
                "Tool",
         
     | 
| 
       12 
     | 
    
         
            -
                "DataLogger",
         
     | 
| 
       13 
11 
     | 
    
         
             
                "DataNode",
         
     | 
| 
      
 12 
     | 
    
         
            +
                "DLog",
         
     | 
| 
      
 13 
     | 
    
         
            +
                "DataLogger",
         
     | 
| 
       14 
14 
     | 
    
         
             
                "Relationship",
         
     | 
| 
       15 
15 
     | 
    
         
             
                "Graph",
         
     | 
| 
       16 
16 
     | 
    
         
             
                "Structure",
         
     | 
| 
      
 17 
     | 
    
         
            +
                "ActionNode",
         
     | 
| 
      
 18 
     | 
    
         
            +
                "TOOL_TYPE",
         
     | 
| 
       17 
19 
     | 
    
         
             
            ]
         
     | 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            from enum import Enum
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            from .base_node import BaseNode
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            class ActionSelection(BaseNode):
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                def __init__(self, action: str = "chat", action_kwargs=None):
         
     | 
| 
      
 9 
     | 
    
         
            +
                    if action_kwargs is None:
         
     | 
| 
      
 10 
     | 
    
         
            +
                        action_kwargs = {}
         
     | 
| 
      
 11 
     | 
    
         
            +
                    super().__init__()
         
     | 
| 
      
 12 
     | 
    
         
            +
                    self.action = action
         
     | 
| 
      
 13 
     | 
    
         
            +
                    self.action_kwargs = action_kwargs
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            class ActionNode(BaseNode):
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                def __init__(
         
     | 
| 
      
 19 
     | 
    
         
            +
                    self, instruction, action: str = "chat", tools=None, action_kwargs=None
         
     | 
| 
      
 20 
     | 
    
         
            +
                ):
         
     | 
| 
      
 21 
     | 
    
         
            +
                    if tools is None:
         
     | 
| 
      
 22 
     | 
    
         
            +
                        tools = []
         
     | 
| 
      
 23 
     | 
    
         
            +
                    if action_kwargs is None:
         
     | 
| 
      
 24 
     | 
    
         
            +
                        action_kwargs = {}
         
     | 
| 
      
 25 
     | 
    
         
            +
                    super().__init__()
         
     | 
| 
      
 26 
     | 
    
         
            +
                    self.instruction = instruction
         
     | 
| 
      
 27 
     | 
    
         
            +
                    self.action = action
         
     | 
| 
      
 28 
     | 
    
         
            +
                    self.tools = tools
         
     | 
| 
      
 29 
     | 
    
         
            +
                    self.action_kwargs = action_kwargs
         
     | 
| 
         @@ -5,10 +5,7 @@ from typing import Any, TypeVar, Type, Callable 
     | 
|
| 
       5 
5 
     | 
    
         
             
            import pandas as pd
         
     | 
| 
       6 
6 
     | 
    
         
             
            from pydantic import BaseModel, ValidationError
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            import lionagi.libs.ln_convert as convert
         
     | 
| 
       10 
     | 
    
         
            -
            from lionagi.libs.ln_parse import ParseUtil
         
     | 
| 
       11 
     | 
    
         
            -
            from lionagi.libs.sys_util import SysUtil
         
     | 
| 
      
 8 
     | 
    
         
            +
            from lionagi.libs import nested, convert, ParseUtil, SysUtil
         
     | 
| 
       12 
9 
     | 
    
         | 
| 
       13 
10 
     | 
    
         
             
            T = TypeVar("T")  # Generic type for return type of from_obj method
         
     | 
| 
       14 
11 
     | 
    
         | 
| 
         @@ -24,12 +21,12 @@ class BaseToObjectMixin(ABC, BaseModel): 
     | 
|
| 
       24 
21 
     | 
    
         
             
                    string. It supports passing arbitrary arguments to the underlying `model_dump_json` method.
         
     | 
| 
       25 
22 
     | 
    
         | 
| 
       26 
23 
     | 
    
         
             
                    Args:
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
      
 24 
     | 
    
         
            +
                            *args: Variable-length argument list to be passed to `model_dump_json`.
         
     | 
| 
      
 25 
     | 
    
         
            +
                            **kwargs: Arbitrary keyword arguments, with `by_alias=True` set by default to use
         
     | 
| 
      
 26 
     | 
    
         
            +
                                              model field aliases in the output JSON, if any.
         
     | 
| 
       30 
27 
     | 
    
         | 
| 
       31 
28 
     | 
    
         
             
                    Returns:
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 29 
     | 
    
         
            +
                            str: A JSON string representation of the model instance.
         
     | 
| 
       33 
30 
     | 
    
         
             
                    """
         
     | 
| 
       34 
31 
     | 
    
         
             
                    return self.model_dump_json(*args, by_alias=True, **kwargs)
         
     | 
| 
       35 
32 
     | 
    
         | 
| 
         @@ -42,12 +39,12 @@ class BaseToObjectMixin(ABC, BaseModel): 
     | 
|
| 
       42 
39 
     | 
    
         
             
                    aliases instead of the original field names.
         
     | 
| 
       43 
40 
     | 
    
         | 
| 
       44 
41 
     | 
    
         
             
                    Args:
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
      
 42 
     | 
    
         
            +
                            *args: Variable-length argument list for the `model_dump` method.
         
     | 
| 
      
 43 
     | 
    
         
            +
                            **kwargs: Arbitrary keyword arguments. By default, `by_alias=True` is applied, indicating
         
     | 
| 
      
 44 
     | 
    
         
            +
                                              that field aliases should be used as keys in the resulting dictionary.
         
     | 
| 
       48 
45 
     | 
    
         | 
| 
       49 
46 
     | 
    
         
             
                    Returns:
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
      
 47 
     | 
    
         
            +
                            dict[str, Any]: The dictionary representation of the model instance.
         
     | 
| 
       51 
48 
     | 
    
         
             
                    """
         
     | 
| 
       52 
49 
     | 
    
         
             
                    return self.model_dump(*args, by_alias=True, **kwargs)
         
     | 
| 
       53 
50 
     | 
    
         | 
| 
         @@ -60,7 +57,7 @@ class BaseToObjectMixin(ABC, BaseModel): 
     | 
|
| 
       60 
57 
     | 
    
         
             
                    The root element of the XML tree is named after the class of the model instance.
         
     | 
| 
       61 
58 
     | 
    
         | 
| 
       62 
59 
     | 
    
         
             
                    Returns:
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
      
 60 
     | 
    
         
            +
                            str: An XML string representation of the model instance.
         
     | 
| 
       64 
61 
     | 
    
         
             
                    """
         
     | 
| 
       65 
62 
     | 
    
         | 
| 
       66 
63 
     | 
    
         
             
                    import xml.etree.ElementTree as ET
         
     | 
| 
         @@ -88,15 +85,15 @@ class BaseToObjectMixin(ABC, BaseModel): 
     | 
|
| 
       88 
85 
     | 
    
         
             
                    customize the Series creation through `pd_kwargs`.
         
     | 
| 
       89 
86 
     | 
    
         | 
| 
       90 
87 
     | 
    
         
             
                    Args:
         
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
             
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
             
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
      
 88 
     | 
    
         
            +
                            *args: Variable-length argument list for the `to_dict` method.
         
     | 
| 
      
 89 
     | 
    
         
            +
                            pd_kwargs (dict | None): Optional dictionary of keyword arguments to pass to the pandas
         
     | 
| 
      
 90 
     | 
    
         
            +
                                                                             Series constructor. Defaults to None, in which case an empty
         
     | 
| 
      
 91 
     | 
    
         
            +
                                                                             dictionary is used.
         
     | 
| 
      
 92 
     | 
    
         
            +
                            **kwargs: Arbitrary keyword arguments for the `to_dict` method, influencing the dictionary
         
     | 
| 
      
 93 
     | 
    
         
            +
                                              representation used for Series creation.
         
     | 
| 
       97 
94 
     | 
    
         | 
| 
       98 
95 
     | 
    
         
             
                    Returns:
         
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
      
 96 
     | 
    
         
            +
                            pd.Series: A pandas Series representation of the model instance.
         
     | 
| 
       100 
97 
     | 
    
         
             
                    """
         
     | 
| 
       101 
98 
     | 
    
         
             
                    pd_kwargs = {} if pd_kwargs is None else pd_kwargs
         
     | 
| 
       102 
99 
     | 
    
         
             
                    dict_ = self.to_dict(*args, **kwargs)
         
     | 
| 
         @@ -118,15 +115,11 @@ class BaseFromObjectMixin(ABC, BaseModel): 
     | 
|
| 
       118 
115 
     | 
    
         
             
                @from_obj.register(str)
         
     | 
| 
       119 
116 
     | 
    
         
             
                @classmethod
         
     | 
| 
       120 
117 
     | 
    
         
             
                def _from_str(cls, obj: str, *args, fuzzy_parse=False, **kwargs) -> T:
         
     | 
| 
       121 
     | 
    
         
            -
                    if fuzzy_parse 
     | 
| 
       122 
     | 
    
         
            -
                        obj = ParseUtil.fuzzy_parse_json(obj)
         
     | 
| 
       123 
     | 
    
         
            -
                    else:
         
     | 
| 
       124 
     | 
    
         
            -
                        obj = convert.to_dict(obj)
         
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
      
 118 
     | 
    
         
            +
                    obj = ParseUtil.fuzzy_parse_json(obj) if fuzzy_parse else convert.to_dict(obj)
         
     | 
| 
       126 
119 
     | 
    
         
             
                    try:
         
     | 
| 
       127 
120 
     | 
    
         
             
                        return cls.from_obj(obj, *args, **kwargs)
         
     | 
| 
       128 
121 
     | 
    
         
             
                    except ValidationError as e:
         
     | 
| 
       129 
     | 
    
         
            -
                        raise ValueError(f"Invalid JSON for deserialization: {e}")
         
     | 
| 
      
 122 
     | 
    
         
            +
                        raise ValueError(f"Invalid JSON for deserialization: {e}") from e
         
     | 
| 
       130 
123 
     | 
    
         | 
| 
       131 
124 
     | 
    
         
             
                @from_obj.register(list)
         
     | 
| 
       132 
125 
     | 
    
         
             
                @classmethod
         
     | 
| 
         @@ -135,23 +128,27 @@ class BaseFromObjectMixin(ABC, BaseModel): 
     | 
|
| 
       135 
128 
     | 
    
         | 
| 
       136 
129 
     | 
    
         
             
                @from_obj.register(pd.Series)
         
     | 
| 
       137 
130 
     | 
    
         
             
                @classmethod
         
     | 
| 
       138 
     | 
    
         
            -
                def _from_pd_series(cls, obj: pd.Series, *args, pd_kwargs= 
     | 
| 
      
 131 
     | 
    
         
            +
                def _from_pd_series(cls, obj: pd.Series, *args, pd_kwargs=None, **kwargs) -> T:
         
     | 
| 
      
 132 
     | 
    
         
            +
                    if pd_kwargs is None:
         
     | 
| 
      
 133 
     | 
    
         
            +
                        pd_kwargs = {}
         
     | 
| 
       139 
134 
     | 
    
         
             
                    return cls.from_obj(obj.to_dict(**pd_kwargs), *args, **kwargs)
         
     | 
| 
       140 
135 
     | 
    
         | 
| 
       141 
136 
     | 
    
         
             
                @from_obj.register(pd.DataFrame)
         
     | 
| 
       142 
137 
     | 
    
         
             
                @classmethod
         
     | 
| 
       143 
138 
     | 
    
         
             
                def _from_pd_dataframe(
         
     | 
| 
       144 
     | 
    
         
            -
                    cls, obj: pd.DataFrame, *args, pd_kwargs= 
     | 
| 
      
 139 
     | 
    
         
            +
                    cls, obj: pd.DataFrame, *args, pd_kwargs=None, **kwargs
         
     | 
| 
       145 
140 
     | 
    
         
             
                ) -> list[T]:
         
     | 
| 
      
 141 
     | 
    
         
            +
                    if pd_kwargs is None:
         
     | 
| 
      
 142 
     | 
    
         
            +
                        pd_kwargs = {}
         
     | 
| 
       146 
143 
     | 
    
         
             
                    return [
         
     | 
| 
       147 
144 
     | 
    
         
             
                        cls.from_obj(row, *args, **pd_kwargs, **kwargs) for _, row in obj.iterrows()
         
     | 
| 
       148 
145 
     | 
    
         
             
                    ]
         
     | 
| 
       149 
146 
     | 
    
         | 
| 
       150 
147 
     | 
    
         
             
                @from_obj.register(BaseModel)
         
     | 
| 
       151 
148 
     | 
    
         
             
                @classmethod
         
     | 
| 
       152 
     | 
    
         
            -
                def _from_base_model(
         
     | 
| 
       153 
     | 
    
         
            -
                     
     | 
| 
       154 
     | 
    
         
            -
             
     | 
| 
      
 149 
     | 
    
         
            +
                def _from_base_model(cls, obj: BaseModel, pydantic_kwargs=None, **kwargs) -> T:
         
     | 
| 
      
 150 
     | 
    
         
            +
                    if pydantic_kwargs is None:
         
     | 
| 
      
 151 
     | 
    
         
            +
                        pydantic_kwargs = {"by_alias": True}
         
     | 
| 
       155 
152 
     | 
    
         
             
                    config_ = {**obj.model_dump(**pydantic_kwargs), **kwargs}
         
     | 
| 
       156 
153 
     | 
    
         
             
                    return cls.from_obj(**config_)
         
     | 
| 
       157 
154 
     | 
    
         | 
| 
         @@ -163,11 +160,11 @@ class BaseMetaManageMixin(ABC, BaseModel): 
     | 
|
| 
       163 
160 
     | 
    
         
             
                    Retrieves a list of metadata keys.
         
     | 
| 
       164 
161 
     | 
    
         | 
| 
       165 
162 
     | 
    
         
             
                    Args:
         
     | 
| 
       166 
     | 
    
         
            -
             
     | 
| 
       167 
     | 
    
         
            -
             
     | 
| 
      
 163 
     | 
    
         
            +
                            flattened (bool): If True, returns keys from a flattened metadata structure.
         
     | 
| 
      
 164 
     | 
    
         
            +
                            **kwargs: Additional keyword arguments passed to the flattening function.
         
     | 
| 
       168 
165 
     | 
    
         | 
| 
       169 
166 
     | 
    
         
             
                    Returns:
         
     | 
| 
       170 
     | 
    
         
            -
             
     | 
| 
      
 167 
     | 
    
         
            +
                            list[str]: List of metadata keys.
         
     | 
| 
       171 
168 
     | 
    
         
             
                    """
         
     | 
| 
       172 
169 
     | 
    
         
             
                    if flattened:
         
     | 
| 
       173 
170 
     | 
    
         
             
                        return nested.get_flattened_keys(self.metadata, **kwargs)
         
     | 
| 
         @@ -178,12 +175,12 @@ class BaseMetaManageMixin(ABC, BaseModel): 
     | 
|
| 
       178 
175 
     | 
    
         
             
                    Checks if a specified key exists in the metadata.
         
     | 
| 
       179 
176 
     | 
    
         | 
| 
       180 
177 
     | 
    
         
             
                    Args:
         
     | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
       182 
     | 
    
         
            -
             
     | 
| 
       183 
     | 
    
         
            -
             
     | 
| 
      
 178 
     | 
    
         
            +
                            key (str): The key to check.
         
     | 
| 
      
 179 
     | 
    
         
            +
                            flattened (bool): If True, checks within a flattened metadata structure.
         
     | 
| 
      
 180 
     | 
    
         
            +
                            **kwargs: Additional keyword arguments for flattening.
         
     | 
| 
       184 
181 
     | 
    
         | 
| 
       185 
182 
     | 
    
         
             
                    Returns:
         
     | 
| 
       186 
     | 
    
         
            -
             
     | 
| 
      
 183 
     | 
    
         
            +
                            bool: True if key exists, False otherwise.
         
     | 
| 
       187 
184 
     | 
    
         
             
                    """
         
     | 
| 
       188 
185 
     | 
    
         
             
                    if flattened:
         
     | 
| 
       189 
186 
     | 
    
         
             
                        return key in nested.get_flattened_keys(self.metadata, **kwargs)
         
     | 
| 
         @@ -196,12 +193,12 @@ class BaseMetaManageMixin(ABC, BaseModel): 
     | 
|
| 
       196 
193 
     | 
    
         
             
                    Retrieves the value associated with a given key from the metadata.
         
     | 
| 
       197 
194 
     | 
    
         | 
| 
       198 
195 
     | 
    
         
             
                    Args:
         
     | 
| 
       199 
     | 
    
         
            -
             
     | 
| 
       200 
     | 
    
         
            -
             
     | 
| 
       201 
     | 
    
         
            -
             
     | 
| 
      
 196 
     | 
    
         
            +
                            key (str): The key for the desired value.
         
     | 
| 
      
 197 
     | 
    
         
            +
                            indices: Optional indices for nested retrieval.
         
     | 
| 
      
 198 
     | 
    
         
            +
                            default (Any): The default value to return if the key is not found.
         
     | 
| 
       202 
199 
     | 
    
         | 
| 
       203 
200 
     | 
    
         
             
                    Returns:
         
     | 
| 
       204 
     | 
    
         
            -
             
     | 
| 
      
 201 
     | 
    
         
            +
                            Any: The value associated with the key or the default value.
         
     | 
| 
       205 
202 
     | 
    
         
             
                    """
         
     | 
| 
       206 
203 
     | 
    
         
             
                    if indices:
         
     | 
| 
       207 
204 
     | 
    
         
             
                        return nested.nget(self.metadata, key, indices, default)
         
     | 
| 
         @@ -212,11 +209,11 @@ class BaseMetaManageMixin(ABC, BaseModel): 
     | 
|
| 
       212 
209 
     | 
    
         
             
                    Renames a key in the metadata.
         
     | 
| 
       213 
210 
     | 
    
         | 
| 
       214 
211 
     | 
    
         
             
                    Args:
         
     | 
| 
       215 
     | 
    
         
            -
             
     | 
| 
       216 
     | 
    
         
            -
             
     | 
| 
      
 212 
     | 
    
         
            +
                            old_key (str): The current key name.
         
     | 
| 
      
 213 
     | 
    
         
            +
                            new_key (str): The new key name.
         
     | 
| 
       217 
214 
     | 
    
         | 
| 
       218 
215 
     | 
    
         
             
                    Returns:
         
     | 
| 
       219 
     | 
    
         
            -
             
     | 
| 
      
 216 
     | 
    
         
            +
                            bool: True if the key was changed, False otherwise.
         
     | 
| 
       220 
217 
     | 
    
         
             
                    """
         
     | 
| 
       221 
218 
     | 
    
         
             
                    if old_key in self.metadata:
         
     | 
| 
       222 
219 
     | 
    
         
             
                        SysUtil.change_dict_key(self.metadata, old_key, new_key)
         
     | 
| 
         @@ -228,12 +225,12 @@ class BaseMetaManageMixin(ABC, BaseModel): 
     | 
|
| 
       228 
225 
     | 
    
         
             
                    Inserts a value into the metadata at specified indices.
         
     | 
| 
       229 
226 
     | 
    
         | 
| 
       230 
227 
     | 
    
         
             
                    Args:
         
     | 
| 
       231 
     | 
    
         
            -
             
     | 
| 
       232 
     | 
    
         
            -
             
     | 
| 
       233 
     | 
    
         
            -
             
     | 
| 
      
 228 
     | 
    
         
            +
                            indices (str | list): The indices where the value should be inserted.
         
     | 
| 
      
 229 
     | 
    
         
            +
                            value (Any): The value to insert.
         
     | 
| 
      
 230 
     | 
    
         
            +
                            **kwargs: Additional keyword arguments.
         
     | 
| 
       234 
231 
     | 
    
         | 
| 
       235 
232 
     | 
    
         
             
                    Returns:
         
     | 
| 
       236 
     | 
    
         
            -
             
     | 
| 
      
 233 
     | 
    
         
            +
                            bool: True if the insertion was successful, False otherwise.
         
     | 
| 
       237 
234 
     | 
    
         
             
                    """
         
     | 
| 
       238 
235 
     | 
    
         
             
                    return nested.ninsert(self.metadata, indices, value, **kwargs)
         
     | 
| 
       239 
236 
     | 
    
         | 
| 
         @@ -243,11 +240,11 @@ class BaseMetaManageMixin(ABC, BaseModel): 
     | 
|
| 
       243 
240 
     | 
    
         
             
                    Removes a key from the metadata and returns its value.
         
     | 
| 
       244 
241 
     | 
    
         | 
| 
       245 
242 
     | 
    
         
             
                    Args:
         
     | 
| 
       246 
     | 
    
         
            -
             
     | 
| 
       247 
     | 
    
         
            -
             
     | 
| 
      
 243 
     | 
    
         
            +
                            key (str): The key to remove.
         
     | 
| 
      
 244 
     | 
    
         
            +
                            default (Any): The default value to return if the key is not found.
         
     | 
| 
       248 
245 
     | 
    
         | 
| 
       249 
246 
     | 
    
         
             
                    Returns:
         
     | 
| 
       250 
     | 
    
         
            -
             
     | 
| 
      
 247 
     | 
    
         
            +
                            Any: The value of the removed key or the default value.
         
     | 
| 
       251 
248 
     | 
    
         
             
                    """
         
     | 
| 
       252 
249 
     | 
    
         
             
                    return self.metadata.pop(key, default)
         
     | 
| 
       253 
250 
     | 
    
         | 
| 
         @@ -258,12 +255,12 @@ class BaseMetaManageMixin(ABC, BaseModel): 
     | 
|
| 
       258 
255 
     | 
    
         
             
                    Merges additional metadata into the existing metadata.
         
     | 
| 
       259 
256 
     | 
    
         | 
| 
       260 
257 
     | 
    
         
             
                    Args:
         
     | 
| 
       261 
     | 
    
         
            -
             
     | 
| 
       262 
     | 
    
         
            -
             
     | 
| 
       263 
     | 
    
         
            -
             
     | 
| 
      
 258 
     | 
    
         
            +
                            additional_metadata (dict[str, Any]): The metadata to merge in.
         
     | 
| 
      
 259 
     | 
    
         
            +
                            overwrite (bool): If True, existing keys will be overwritten by those in additional_metadata.
         
     | 
| 
      
 260 
     | 
    
         
            +
                            **kwargs: Additional keyword arguments for the merge.
         
     | 
| 
       264 
261 
     | 
    
         | 
| 
       265 
262 
     | 
    
         
             
                    Returns:
         
     | 
| 
       266 
     | 
    
         
            -
             
     | 
| 
      
 263 
     | 
    
         
            +
                            None
         
     | 
| 
       267 
264 
     | 
    
         
             
                    """
         
     | 
| 
       268 
265 
     | 
    
         
             
                    nested.nmerge(
         
     | 
| 
       269 
266 
     | 
    
         
             
                        [self.metadata, additional_metadata], overwrite=overwrite, **kwargs
         
     | 
| 
         @@ -278,7 +275,7 @@ class BaseMetaManageMixin(ABC, BaseModel): 
     | 
|
| 
       278 
275 
     | 
    
         
             
                    Clears all metadata.
         
     | 
| 
       279 
276 
     | 
    
         | 
| 
       280 
277 
     | 
    
         
             
                    Returns:
         
     | 
| 
       281 
     | 
    
         
            -
             
     | 
| 
      
 278 
     | 
    
         
            +
                            None
         
     | 
| 
       282 
279 
     | 
    
         
             
                    """
         
     | 
| 
       283 
280 
     | 
    
         
             
                    self.metadata.clear()
         
     | 
| 
       284 
281 
     | 
    
         | 
| 
         @@ -287,10 +284,10 @@ class BaseMetaManageMixin(ABC, BaseModel): 
     | 
|
| 
       287 
284 
     | 
    
         
             
                    Filters the metadata based on a condition.
         
     | 
| 
       288 
285 
     | 
    
         | 
| 
       289 
286 
     | 
    
         
             
                    Args:
         
     | 
| 
       290 
     | 
    
         
            -
             
     | 
| 
      
 287 
     | 
    
         
            +
                            condition (Callable[[Any, Any], bool]): The condition function to apply.
         
     | 
| 
       291 
288 
     | 
    
         | 
| 
       292 
289 
     | 
    
         
             
                    Returns:
         
     | 
| 
       293 
     | 
    
         
            -
             
     | 
| 
      
 290 
     | 
    
         
            +
                            dict[str, Any]: The filtered metadata.
         
     | 
| 
       294 
291 
     | 
    
         
             
                    """
         
     | 
| 
       295 
292 
     | 
    
         
             
                    return nested.nfilter(self.metadata, condition)
         
     | 
| 
       296 
293 
     | 
    
         |