lionagi 0.17.9__py3-none-any.whl → 0.17.11__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.
Files changed (151) hide show
  1. lionagi/__init__.py +1 -2
  2. lionagi/_class_registry.py +1 -2
  3. lionagi/_errors.py +1 -2
  4. lionagi/adapters/async_postgres_adapter.py +2 -10
  5. lionagi/config.py +1 -2
  6. lionagi/fields/action.py +1 -2
  7. lionagi/fields/base.py +3 -0
  8. lionagi/fields/code.py +3 -0
  9. lionagi/fields/file.py +3 -0
  10. lionagi/fields/instruct.py +1 -2
  11. lionagi/fields/reason.py +3 -2
  12. lionagi/fields/research.py +3 -0
  13. lionagi/libs/__init__.py +1 -2
  14. lionagi/libs/file/__init__.py +1 -2
  15. lionagi/libs/file/chunk.py +1 -2
  16. lionagi/libs/file/process.py +1 -2
  17. lionagi/libs/schema/__init__.py +1 -2
  18. lionagi/libs/schema/as_readable.py +1 -2
  19. lionagi/libs/schema/extract_code_block.py +1 -2
  20. lionagi/libs/schema/extract_docstring.py +1 -2
  21. lionagi/libs/schema/function_to_schema.py +1 -2
  22. lionagi/libs/schema/load_pydantic_model_from_schema.py +1 -2
  23. lionagi/libs/validate/__init__.py +1 -2
  24. lionagi/libs/validate/common_field_validators.py +1 -2
  25. lionagi/libs/validate/validate_boolean.py +1 -2
  26. lionagi/ln/fuzzy/_string_similarity.py +1 -2
  27. lionagi/ln/types.py +45 -0
  28. lionagi/models/__init__.py +1 -2
  29. lionagi/models/field_model.py +392 -286
  30. lionagi/models/hashable_model.py +98 -14
  31. lionagi/models/model_params.py +272 -271
  32. lionagi/models/operable_model.py +9 -10
  33. lionagi/models/schema_model.py +1 -2
  34. lionagi/operations/ReAct/ReAct.py +1 -2
  35. lionagi/operations/ReAct/__init__.py +1 -2
  36. lionagi/operations/ReAct/utils.py +1 -2
  37. lionagi/operations/__init__.py +1 -2
  38. lionagi/operations/_act/__init__.py +1 -2
  39. lionagi/operations/_act/act.py +1 -2
  40. lionagi/operations/brainstorm/__init__.py +1 -2
  41. lionagi/operations/brainstorm/brainstorm.py +1 -2
  42. lionagi/operations/brainstorm/prompt.py +1 -2
  43. lionagi/operations/builder.py +1 -2
  44. lionagi/operations/chat/__init__.py +1 -2
  45. lionagi/operations/chat/chat.py +1 -2
  46. lionagi/operations/communicate/communicate.py +1 -2
  47. lionagi/operations/flow.py +1 -2
  48. lionagi/operations/instruct/__init__.py +1 -2
  49. lionagi/operations/instruct/instruct.py +1 -2
  50. lionagi/operations/interpret/__init__.py +1 -2
  51. lionagi/operations/interpret/interpret.py +1 -2
  52. lionagi/operations/operate/__init__.py +1 -2
  53. lionagi/operations/operate/operate.py +1 -2
  54. lionagi/operations/parse/__init__.py +1 -2
  55. lionagi/operations/parse/parse.py +1 -2
  56. lionagi/operations/plan/__init__.py +1 -2
  57. lionagi/operations/plan/plan.py +1 -2
  58. lionagi/operations/plan/prompt.py +1 -2
  59. lionagi/operations/select/__init__.py +1 -2
  60. lionagi/operations/select/select.py +1 -2
  61. lionagi/operations/select/utils.py +1 -2
  62. lionagi/operations/types.py +1 -2
  63. lionagi/operations/utils.py +1 -2
  64. lionagi/protocols/__init__.py +1 -2
  65. lionagi/protocols/_concepts.py +1 -2
  66. lionagi/protocols/action/__init__.py +1 -2
  67. lionagi/protocols/action/function_calling.py +3 -20
  68. lionagi/protocols/action/manager.py +34 -4
  69. lionagi/protocols/action/tool.py +1 -2
  70. lionagi/protocols/contracts.py +1 -2
  71. lionagi/protocols/forms/__init__.py +1 -2
  72. lionagi/protocols/forms/base.py +1 -2
  73. lionagi/protocols/forms/flow.py +1 -2
  74. lionagi/protocols/forms/form.py +1 -2
  75. lionagi/protocols/forms/report.py +1 -2
  76. lionagi/protocols/generic/__init__.py +1 -2
  77. lionagi/protocols/generic/element.py +17 -65
  78. lionagi/protocols/generic/event.py +1 -2
  79. lionagi/protocols/generic/log.py +14 -12
  80. lionagi/protocols/generic/pile.py +6 -4
  81. lionagi/protocols/generic/processor.py +1 -2
  82. lionagi/protocols/generic/progression.py +1 -2
  83. lionagi/protocols/graph/__init__.py +1 -2
  84. lionagi/protocols/graph/edge.py +1 -2
  85. lionagi/protocols/graph/graph.py +1 -2
  86. lionagi/protocols/graph/node.py +1 -2
  87. lionagi/protocols/ids.py +1 -2
  88. lionagi/protocols/mail/__init__.py +1 -2
  89. lionagi/protocols/mail/exchange.py +1 -2
  90. lionagi/protocols/mail/mail.py +1 -2
  91. lionagi/protocols/mail/mailbox.py +1 -2
  92. lionagi/protocols/mail/manager.py +1 -2
  93. lionagi/protocols/mail/package.py +1 -2
  94. lionagi/protocols/messages/__init__.py +1 -2
  95. lionagi/protocols/messages/action_request.py +1 -2
  96. lionagi/protocols/messages/action_response.py +1 -2
  97. lionagi/protocols/messages/assistant_response.py +1 -2
  98. lionagi/protocols/messages/base.py +1 -2
  99. lionagi/protocols/messages/instruction.py +1 -2
  100. lionagi/protocols/messages/manager.py +1 -2
  101. lionagi/protocols/messages/message.py +1 -2
  102. lionagi/protocols/messages/system.py +1 -2
  103. lionagi/protocols/operatives/__init__.py +1 -2
  104. lionagi/protocols/operatives/operative.py +30 -8
  105. lionagi/protocols/operatives/step.py +1 -2
  106. lionagi/protocols/types.py +1 -2
  107. lionagi/service/connections/__init__.py +1 -2
  108. lionagi/service/connections/api_calling.py +1 -2
  109. lionagi/service/connections/endpoint.py +1 -2
  110. lionagi/service/connections/endpoint_config.py +1 -2
  111. lionagi/service/connections/header_factory.py +1 -2
  112. lionagi/service/connections/match_endpoint.py +1 -2
  113. lionagi/service/connections/mcp/__init__.py +1 -2
  114. lionagi/service/connections/mcp/wrapper.py +1 -2
  115. lionagi/service/connections/providers/__init__.py +1 -2
  116. lionagi/service/connections/providers/anthropic_.py +1 -2
  117. lionagi/service/connections/providers/claude_code_cli.py +1 -2
  118. lionagi/service/connections/providers/exa_.py +1 -2
  119. lionagi/service/connections/providers/nvidia_nim_.py +2 -27
  120. lionagi/service/connections/providers/oai_.py +1 -2
  121. lionagi/service/connections/providers/ollama_.py +1 -2
  122. lionagi/service/connections/providers/perplexity_.py +1 -2
  123. lionagi/service/hooks/__init__.py +1 -1
  124. lionagi/service/hooks/_types.py +1 -1
  125. lionagi/service/hooks/_utils.py +1 -1
  126. lionagi/service/hooks/hook_event.py +1 -1
  127. lionagi/service/hooks/hook_registry.py +1 -1
  128. lionagi/service/hooks/hooked_event.py +1 -2
  129. lionagi/service/imodel.py +1 -2
  130. lionagi/service/manager.py +1 -2
  131. lionagi/service/rate_limited_processor.py +1 -2
  132. lionagi/service/resilience.py +1 -2
  133. lionagi/service/third_party/anthropic_models.py +3 -5
  134. lionagi/service/third_party/claude_code.py +1 -2
  135. lionagi/service/token_calculator.py +1 -2
  136. lionagi/service/types.py +1 -2
  137. lionagi/session/__init__.py +1 -2
  138. lionagi/session/branch.py +1 -2
  139. lionagi/session/session.py +1 -2
  140. lionagi/tools/__init__.py +1 -2
  141. lionagi/tools/base.py +1 -2
  142. lionagi/tools/file/__init__.py +1 -2
  143. lionagi/tools/file/reader.py +1 -2
  144. lionagi/tools/types.py +1 -2
  145. lionagi/utils.py +1 -2
  146. lionagi/version.py +1 -1
  147. {lionagi-0.17.9.dist-info → lionagi-0.17.11.dist-info}/METADATA +2 -2
  148. lionagi-0.17.11.dist-info/RECORD +199 -0
  149. lionagi-0.17.9.dist-info/RECORD +0 -199
  150. {lionagi-0.17.9.dist-info → lionagi-0.17.11.dist-info}/WHEEL +0 -0
  151. {lionagi-0.17.9.dist-info → lionagi-0.17.11.dist-info}/licenses/LICENSE +0 -0
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from __future__ import annotations
@@ -11,6 +10,7 @@ from typing import Any
11
10
 
12
11
  from pydantic import BaseModel, Field, PrivateAttr, field_validator
13
12
 
13
+ from lionagi.models.hashable_model import HashableModel
14
14
  from lionagi.utils import create_path, to_dict
15
15
 
16
16
  from .element import Element
@@ -24,6 +24,8 @@ __all__ = (
24
24
  "LogManager",
25
25
  )
26
26
 
27
+ logger = logging.getLogger(__name__)
28
+
27
29
 
28
30
  class DataLoggerConfig(BaseModel):
29
31
  persist_dir: str | Path = "./data/logs"
@@ -88,13 +90,13 @@ class Log(Element):
88
90
  Create a new Log from an Element, storing a dict snapshot
89
91
  of the element's data.
90
92
  """
91
- if hasattr(content, "to_dict"):
92
- content = content.to_dict()
93
+ if isinstance(content, Element | HashableModel):
94
+ content = content.to_dict(mode="json")
93
95
  else:
94
96
  content = to_dict(content, recursive=True, suppress=True)
95
97
 
96
98
  if content is {}:
97
- logging.warning(
99
+ logger.warning(
98
100
  "No content to log, or original data was of invalid type. Making an empty log..."
99
101
  )
100
102
  return cls(content={"error": "No content to log."})
@@ -149,7 +151,7 @@ class DataLogger:
149
151
  try:
150
152
  self.dump(clear=self._config.clear_after_dump)
151
153
  except Exception as e:
152
- logging.error(f"Failed to auto-dump logs: {e}")
154
+ logger.error(f"Failed to auto-dump logs: {e}")
153
155
  self.logs.include(log_)
154
156
 
155
157
  async def alog(self, log_: Log) -> None:
@@ -169,7 +171,7 @@ class DataLogger:
169
171
  unsupported, raise ValueError. Optionally clear logs after.
170
172
  """
171
173
  if not self.logs:
172
- logging.debug("No logs to dump.")
174
+ logger.debug("No logs to dump.")
173
175
  return
174
176
 
175
177
  fp = persist_path or self._create_path()
@@ -182,7 +184,7 @@ class DataLogger:
182
184
  else:
183
185
  raise ValueError(f"Unsupported file extension: {suffix}")
184
186
 
185
- logging.info(f"Dumped logs to {fp}")
187
+ logger.info(f"Dumped logs to {fp}")
186
188
  do_clear = (
187
189
  self._config.clear_after_dump if clear is None else clear
188
190
  )
@@ -191,12 +193,12 @@ class DataLogger:
191
193
  except Exception as e:
192
194
  # Check if it's a JSON serialization error with complex objects
193
195
  if "JSON serializable" in str(e):
194
- logging.debug(f"Could not serialize logs to JSON: {e}")
196
+ logger.debug(f"Could not serialize logs to JSON: {e}")
195
197
  # Don't raise for JSON serialization issues during dumps
196
198
  if clear is not False:
197
199
  self.logs.clear() # Still clear if requested
198
200
  else:
199
- logging.error(f"Failed to dump logs: {e}")
201
+ logger.error(f"Failed to dump logs: {e}")
200
202
  raise
201
203
 
202
204
  async def adump(
@@ -233,9 +235,9 @@ class DataLogger:
233
235
  # Only log debug level for JSON serialization errors during exit
234
236
  # These are non-critical and often occur with complex objects
235
237
  if "JSON serializable" in str(e):
236
- logging.debug(f"Could not serialize logs to JSON: {e}")
238
+ logger.debug(f"Could not serialize logs to JSON: {e}")
237
239
  else:
238
- logging.error(f"Failed to save logs on exit: {e}")
240
+ logger.error(f"Failed to save logs on exit: {e}")
239
241
 
240
242
  @classmethod
241
243
  def from_config(
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from __future__ import annotations
@@ -16,10 +15,9 @@ from collections.abc import (
16
15
  )
17
16
  from functools import wraps
18
17
  from pathlib import Path
19
- from typing import Any, ClassVar, Generic, Literal, TypeVar
18
+ from typing import TYPE_CHECKING, Any, ClassVar, Generic, Literal, TypeVar
20
19
 
21
20
  from pydantic import Field, field_serializer
22
- from pydantic.fields import FieldInfo
23
21
  from pydapter import Adaptable, AsyncAdaptable
24
22
  from typing_extensions import Self, deprecated, override
25
23
 
@@ -37,6 +35,10 @@ from .._concepts import Observable
37
35
  from .element import ID, Collective, E, Element, IDType, validate_order
38
36
  from .progression import Progression
39
37
 
38
+ if TYPE_CHECKING:
39
+ from pydantic.fields import FieldInfo
40
+
41
+
40
42
  D = TypeVar("D")
41
43
  T = TypeVar("T", bound=E)
42
44
 
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  import asyncio
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from __future__ import annotations
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from .edge import Edge, EdgeCondition
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from typing import Any
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from collections import deque
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from __future__ import annotations
lionagi/protocols/ids.py CHANGED
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  """ID bridge utilities for V0/V1 compatibility.
@@ -1,3 +1,2 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  import asyncio
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from pydantic import field_validator
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from lionagi.protocols.generic.element import IDType
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  import asyncio
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from enum import Enum
@@ -1,3 +1,2 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from collections.abc import Callable
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from typing import Any
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from typing import Any
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from enum import Enum
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from typing import Any, Literal
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from typing import Any, Literal
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from __future__ import annotations
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from datetime import datetime
@@ -1,3 +1,2 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from typing import Any
@@ -79,7 +78,13 @@ class Operative:
79
78
  """Initialize from ModelParams for backward compatibility."""
80
79
  # Add field models to the request operable
81
80
  if params.field_models:
82
- for field_model in params.field_models:
81
+ # Coerce to list if single FieldModel instance
82
+ field_models_list = (
83
+ [params.field_models]
84
+ if isinstance(params.field_models, FieldModel)
85
+ else params.field_models
86
+ )
87
+ for field_model in field_models_list:
83
88
  self._request_operable.add_field(
84
89
  field_model.name,
85
90
  field_model=field_model,
@@ -103,8 +108,16 @@ class Operative:
103
108
  use_fields = set(self._request_operable.all_fields.keys()) - set(
104
109
  exclude_fields
105
110
  )
111
+
112
+ # Determine model name - prefer explicit name, then base_type name, then default
113
+ model_name = "RequestModel"
114
+ if not params._is_sentinel(params.name):
115
+ model_name = params.name
116
+ elif not params._is_sentinel(params.base_type):
117
+ model_name = params.base_type.__name__
118
+
106
119
  self.request_type = self._request_operable.new_model(
107
- name=params.name or "RequestModel",
120
+ name=model_name,
108
121
  use_fields=use_fields,
109
122
  base_type=params.base_type,
110
123
  frozen=params.frozen,
@@ -112,9 +125,12 @@ class Operative:
112
125
  doc=params.doc,
113
126
  )
114
127
 
115
- # Update name if not set
116
- if not self.name and params.name:
117
- self.name = params.name
128
+ # Update name if not set - prefer explicit name, then base_type name
129
+ if not self.name:
130
+ if not params._is_sentinel(params.name):
131
+ self.name = params.name
132
+ elif not params._is_sentinel(params.base_type):
133
+ self.name = params.base_type.__name__
118
134
 
119
135
  def model_dump(self) -> dict[str, Any]:
120
136
  """Convert to dictionary for backward compatibility.
@@ -285,7 +301,13 @@ class Operative:
285
301
 
286
302
  # Add field models (skip if already exists from inheritance)
287
303
  if field_models:
288
- for field_model in field_models:
304
+ # Coerce to list if single FieldModel instance
305
+ field_models_list = (
306
+ [field_models]
307
+ if isinstance(field_models, FieldModel)
308
+ else field_models
309
+ )
310
+ for field_model in field_models_list:
289
311
  if field_model.name not in self._response_operable.all_fields:
290
312
  self._response_operable.add_field(
291
313
  field_model.name,
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from pydantic import BaseModel
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from ._concepts import Collective, Communicatable, Condition, Manager
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from .endpoint import Endpoint
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  import logging
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  import asyncio
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  import logging
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from typing import Literal
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from lionagi.service.connections.endpoint_config import EndpointConfig
@@ -1,3 +1,2 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  import asyncio
@@ -1,3 +1,2 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from pydantic import BaseModel
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from __future__ import annotations
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from __future__ import annotations
@@ -1,24 +1,6 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
- """
6
- NVIDIA NIM endpoint configurations.
7
-
8
- This module provides endpoint configurations for NVIDIA NIM (NVIDIA Inference Microservices),
9
- which offers GPU-accelerated inference for various AI models through an OpenAI-compatible API.
10
-
11
- NVIDIA NIM features:
12
- - OpenAI-compatible API endpoints
13
- - GPU-accelerated inference
14
- - Support for various open-source models (Llama, Mistral, etc.)
15
- - Both cloud-hosted and self-hosted options
16
- - Free tier with 1000 credits for development
17
-
18
- API Documentation: https://docs.nvidia.com/nim/
19
- Build Portal: https://build.nvidia.com/
20
- """
21
-
22
4
  from lionagi.config import settings
23
5
  from lionagi.service.connections.endpoint import Endpoint
24
6
  from lionagi.service.connections.endpoint_config import EndpointConfig
@@ -69,15 +51,8 @@ NVIDIA_NIM_EMBED_ENDPOINT_CONFIG = _get_nvidia_nim_config(
69
51
  class NvidiaNimChatEndpoint(Endpoint):
70
52
  """NVIDIA NIM chat completion endpoint.
71
53
 
72
- Supports various open-source models including:
73
- - meta/llama3-8b-instruct
74
- - meta/llama3-70b-instruct
75
- - meta/llama3.1-405b-instruct
76
- - mistralai/mixtral-8x7b-instruct-v0.1
77
- - google/gemma-7b
78
- - And many more...
79
-
80
54
  Get your API key from: https://build.nvidia.com/
55
+ API Documentation: https://docs.nvidia.com/nim/
81
56
  """
82
57
 
83
58
  def __init__(self, config=None, **kwargs):
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  """
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  """
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  """
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  from ._types import AssosiatedEventInfo, HookDict, HookEventTypes
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
2
2
  # SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  from __future__ import annotations
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  import anyio
lionagi/service/imodel.py CHANGED
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  import asyncio
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  from lionagi.protocols._concepts import Manager
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  import asyncio
@@ -1,5 +1,4 @@
1
- # Copyright (c) 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
1
+ # Copyright (c) 2023-2025, HaiyangLi <quantocean.li at gmail dot com>
3
2
  # SPDX-License-Identifier: Apache-2.0
4
3
 
5
4
  """