lionagi 0.17.0__tar.gz → 0.17.1__tar.gz

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 (315) hide show
  1. {lionagi-0.17.0 → lionagi-0.17.1}/PKG-INFO +4 -1
  2. lionagi-0.17.1/lionagi/__init__.py +54 -0
  3. lionagi-0.17.1/lionagi/_types.py +47 -0
  4. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/flow.py +91 -0
  5. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/graph/node.py +27 -8
  6. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/__init__.py +19 -1
  7. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/connections/api_calling.py +13 -4
  8. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/types.py +19 -1
  9. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/session/session.py +42 -0
  10. lionagi-0.17.1/lionagi/version.py +1 -0
  11. {lionagi-0.17.0 → lionagi-0.17.1}/pyproject.toml +6 -1
  12. {lionagi-0.17.0 → lionagi-0.17.1}/uv.lock +65 -1
  13. lionagi-0.17.0/lionagi/__init__.py +0 -32
  14. lionagi-0.17.0/lionagi/_types.py +0 -3
  15. lionagi-0.17.0/lionagi/version.py +0 -1
  16. {lionagi-0.17.0 → lionagi-0.17.1}/.coveragerc +0 -0
  17. {lionagi-0.17.0 → lionagi-0.17.1}/.env.example +0 -0
  18. {lionagi-0.17.0 → lionagi-0.17.1}/.github/FUNDING.yml +0 -0
  19. {lionagi-0.17.0 → lionagi-0.17.1}/.github/dependabot.yml +0 -0
  20. {lionagi-0.17.0 → lionagi-0.17.1}/.github/workflows/benchmarks.yml +0 -0
  21. {lionagi-0.17.0 → lionagi-0.17.1}/.github/workflows/ci.yml +0 -0
  22. {lionagi-0.17.0 → lionagi-0.17.1}/.github/workflows/codeql.yml +0 -0
  23. {lionagi-0.17.0 → lionagi-0.17.1}/.github/workflows/docs-deploy.yml +0 -0
  24. {lionagi-0.17.0 → lionagi-0.17.1}/.github/workflows/refresh-bench-baselines.yml +0 -0
  25. {lionagi-0.17.0 → lionagi-0.17.1}/.github/workflows/release.yml +0 -0
  26. {lionagi-0.17.0 → lionagi-0.17.1}/.gitignore +0 -0
  27. {lionagi-0.17.0 → lionagi-0.17.1}/.pre-commit-config.yaml +0 -0
  28. {lionagi-0.17.0 → lionagi-0.17.1}/.python-version +0 -0
  29. {lionagi-0.17.0 → lionagi-0.17.1}/CODE_OF_CONDUCT.md +0 -0
  30. {lionagi-0.17.0 → lionagi-0.17.1}/CONTRIBUTING.md +0 -0
  31. {lionagi-0.17.0 → lionagi-0.17.1}/LICENSE +0 -0
  32. {lionagi-0.17.0 → lionagi-0.17.1}/README.md +0 -0
  33. {lionagi-0.17.0 → lionagi-0.17.1}/assets/operation_builder.gif +0 -0
  34. {lionagi-0.17.0 → lionagi-0.17.1}/benchmarks/README.md +0 -0
  35. {lionagi-0.17.0 → lionagi-0.17.1}/benchmarks/baselines/.gitkeep +0 -0
  36. {lionagi-0.17.0 → lionagi-0.17.1}/benchmarks/baselines/concurrency-asyncio.json +0 -0
  37. {lionagi-0.17.0 → lionagi-0.17.1}/benchmarks/baselines/concurrency-trio.json +0 -0
  38. {lionagi-0.17.0 → lionagi-0.17.1}/benchmarks/baselines/fuzzy.json +0 -0
  39. {lionagi-0.17.0 → lionagi-0.17.1}/benchmarks/baselines/ln-asyncio.json +0 -0
  40. {lionagi-0.17.0 → lionagi-0.17.1}/benchmarks/baselines/ln-trio.json +0 -0
  41. {lionagi-0.17.0 → lionagi-0.17.1}/benchmarks/ci_compare.py +0 -0
  42. {lionagi-0.17.0 → lionagi-0.17.1}/benchmarks/concurrency_bench.py +0 -0
  43. {lionagi-0.17.0 → lionagi-0.17.1}/benchmarks/fuzzy_bench.py +0 -0
  44. {lionagi-0.17.0 → lionagi-0.17.1}/benchmarks/ln_bench.py +0 -0
  45. {lionagi-0.17.0 → lionagi-0.17.1}/cookbooks/001_branch_converse.ipynb +0 -0
  46. {lionagi-0.17.0 → lionagi-0.17.1}/cookbooks/002_branch_interact.ipynb +0 -0
  47. {lionagi-0.17.0 → lionagi-0.17.1}/cookbooks/003_branch_info.ipynb +0 -0
  48. {lionagi-0.17.0 → lionagi-0.17.1}/cookbooks/004_conversation_patterns.ipynb +0 -0
  49. {lionagi-0.17.0 → lionagi-0.17.1}/cookbooks/005_react_basics.ipynb +0 -0
  50. {lionagi-0.17.0 → lionagi-0.17.1}/cookbooks/006_operation_graphs_claim_extraction.ipynb +0 -0
  51. {lionagi-0.17.0 → lionagi-0.17.1}/cookbooks/007_fan_out_in.py +0 -0
  52. {lionagi-0.17.0 → lionagi-0.17.1}/cookbooks/claude_proxy/README.md +0 -0
  53. {lionagi-0.17.0 → lionagi-0.17.1}/cookbooks/claude_proxy/claude_code_proxy.py +0 -0
  54. {lionagi-0.17.0 → lionagi-0.17.1}/cookbooks/claude_proxy/run_w_claude_code_proxy.ipynb +0 -0
  55. {lionagi-0.17.0 → lionagi-0.17.1}/cookbooks/data/002_comedian.json +0 -0
  56. {lionagi-0.17.0 → lionagi-0.17.1}/cookbooks/data/002_critic.json +0 -0
  57. {lionagi-0.17.0 → lionagi-0.17.1}/cookbooks/data/006_lion_proof_ch2.md +0 -0
  58. {lionagi-0.17.0 → lionagi-0.17.1}/cookbooks/using_claude_code.py +0 -0
  59. {lionagi-0.17.0 → lionagi-0.17.1}/docs/DOCUMENTATION_STANDARDS.md +0 -0
  60. {lionagi-0.17.0 → lionagi-0.17.1}/docs/advanced/custom-operations.md +0 -0
  61. {lionagi-0.17.0 → lionagi-0.17.1}/docs/advanced/error-handling.md +0 -0
  62. {lionagi-0.17.0 → lionagi-0.17.1}/docs/advanced/flow-composition.md +0 -0
  63. {lionagi-0.17.0 → lionagi-0.17.1}/docs/advanced/index.md +0 -0
  64. {lionagi-0.17.0 → lionagi-0.17.1}/docs/advanced/observability.md +0 -0
  65. {lionagi-0.17.0 → lionagi-0.17.1}/docs/advanced/performance.md +0 -0
  66. {lionagi-0.17.0 → lionagi-0.17.1}/docs/code-of-conduct.md +0 -0
  67. {lionagi-0.17.0 → lionagi-0.17.1}/docs/comparisons/langgraph.md +0 -0
  68. {lionagi-0.17.0 → lionagi-0.17.1}/docs/contributing.md +0 -0
  69. {lionagi-0.17.0 → lionagi-0.17.1}/docs/cookbook/brainstorming.md +0 -0
  70. {lionagi-0.17.0 → lionagi-0.17.1}/docs/cookbook/claim-extraction.md +0 -0
  71. {lionagi-0.17.0 → lionagi-0.17.1}/docs/cookbook/code-review-crew.md +0 -0
  72. {lionagi-0.17.0 → lionagi-0.17.1}/docs/cookbook/data-persistence.md +0 -0
  73. {lionagi-0.17.0 → lionagi-0.17.1}/docs/cookbook/hr-automation.md +0 -0
  74. {lionagi-0.17.0 → lionagi-0.17.1}/docs/cookbook/index.md +0 -0
  75. {lionagi-0.17.0 → lionagi-0.17.1}/docs/cookbook/research-synthesis.md +0 -0
  76. {lionagi-0.17.0 → lionagi-0.17.1}/docs/core-concepts/index.md +0 -0
  77. {lionagi-0.17.0 → lionagi-0.17.1}/docs/core-concepts/lionagi-philosophy.md +0 -0
  78. {lionagi-0.17.0 → lionagi-0.17.1}/docs/core-concepts/messages-and-memory.md +0 -0
  79. {lionagi-0.17.0 → lionagi-0.17.1}/docs/core-concepts/models-and-providers.md +0 -0
  80. {lionagi-0.17.0 → lionagi-0.17.1}/docs/core-concepts/operations.md +0 -0
  81. {lionagi-0.17.0 → lionagi-0.17.1}/docs/core-concepts/sessions-and-branches.md +0 -0
  82. {lionagi-0.17.0 → lionagi-0.17.1}/docs/core-concepts/tools-and-functions.md +0 -0
  83. {lionagi-0.17.0 → lionagi-0.17.1}/docs/for-ai-agents/claude-code-usage.md +0 -0
  84. {lionagi-0.17.0 → lionagi-0.17.1}/docs/for-ai-agents/index.md +0 -0
  85. {lionagi-0.17.0 → lionagi-0.17.1}/docs/for-ai-agents/orchestration-guide.md +0 -0
  86. {lionagi-0.17.0 → lionagi-0.17.1}/docs/for-ai-agents/pattern-selection.md +0 -0
  87. {lionagi-0.17.0 → lionagi-0.17.1}/docs/for-ai-agents/self-improvement.md +0 -0
  88. {lionagi-0.17.0 → lionagi-0.17.1}/docs/includes/abbreviations.md +0 -0
  89. {lionagi-0.17.0 → lionagi-0.17.1}/docs/index.md +0 -0
  90. {lionagi-0.17.0 → lionagi-0.17.1}/docs/integrations/databases.md +0 -0
  91. {lionagi-0.17.0 → lionagi-0.17.1}/docs/integrations/dspy-optimization.md +0 -0
  92. {lionagi-0.17.0 → lionagi-0.17.1}/docs/integrations/index.md +0 -0
  93. {lionagi-0.17.0 → lionagi-0.17.1}/docs/integrations/llamaindex-rag.md +0 -0
  94. {lionagi-0.17.0 → lionagi-0.17.1}/docs/integrations/llm-providers.md +0 -0
  95. {lionagi-0.17.0 → lionagi-0.17.1}/docs/integrations/mcp-servers.md +0 -0
  96. {lionagi-0.17.0 → lionagi-0.17.1}/docs/integrations/tools.md +0 -0
  97. {lionagi-0.17.0 → lionagi-0.17.1}/docs/integrations/vector-stores.md +0 -0
  98. {lionagi-0.17.0 → lionagi-0.17.1}/docs/marketing/language-interoperability-manifesto.md +0 -0
  99. {lionagi-0.17.0 → lionagi-0.17.1}/docs/migration/from-autogen.md +0 -0
  100. {lionagi-0.17.0 → lionagi-0.17.1}/docs/migration/from-crewai.md +0 -0
  101. {lionagi-0.17.0 → lionagi-0.17.1}/docs/migration/from-langchain.md +0 -0
  102. {lionagi-0.17.0 → lionagi-0.17.1}/docs/migration/index.md +0 -0
  103. {lionagi-0.17.0 → lionagi-0.17.1}/docs/patterns/conditional-flows.md +0 -0
  104. {lionagi-0.17.0 → lionagi-0.17.1}/docs/patterns/fan-out-in.md +0 -0
  105. {lionagi-0.17.0 → lionagi-0.17.1}/docs/patterns/index.md +0 -0
  106. {lionagi-0.17.0 → lionagi-0.17.1}/docs/patterns/react-with-rag.md +0 -0
  107. {lionagi-0.17.0 → lionagi-0.17.1}/docs/patterns/sequential-analysis.md +0 -0
  108. {lionagi-0.17.0 → lionagi-0.17.1}/docs/patterns/tournament-validation.md +0 -0
  109. {lionagi-0.17.0 → lionagi-0.17.1}/docs/problem-statement.md +0 -0
  110. {lionagi-0.17.0 → lionagi-0.17.1}/docs/quickstart/claude-code-integration.md +0 -0
  111. {lionagi-0.17.0 → lionagi-0.17.1}/docs/quickstart/index.md +0 -0
  112. {lionagi-0.17.0 → lionagi-0.17.1}/docs/quickstart/installation.md +0 -0
  113. {lionagi-0.17.0 → lionagi-0.17.1}/docs/quickstart/orchestration-first.md +0 -0
  114. {lionagi-0.17.0 → lionagi-0.17.1}/docs/quickstart/your-first-flow.md +0 -0
  115. {lionagi-0.17.0 → lionagi-0.17.1}/docs/reference/api/index.md +0 -0
  116. {lionagi-0.17.0 → lionagi-0.17.1}/docs/reference/changelog.md +0 -0
  117. {lionagi-0.17.0 → lionagi-0.17.1}/docs/reference/troubleshooting.md +0 -0
  118. {lionagi-0.17.0 → lionagi-0.17.1}/docs/stylesheets/extra.css +0 -0
  119. {lionagi-0.17.0 → lionagi-0.17.1}/docs/thinking-in-lionagi/branches-as-agents.md +0 -0
  120. {lionagi-0.17.0 → lionagi-0.17.1}/docs/thinking-in-lionagi/builder-pattern.md +0 -0
  121. {lionagi-0.17.0 → lionagi-0.17.1}/docs/thinking-in-lionagi/graphs-over-chains.md +0 -0
  122. {lionagi-0.17.0 → lionagi-0.17.1}/docs/thinking-in-lionagi/index.md +0 -0
  123. {lionagi-0.17.0 → lionagi-0.17.1}/docs/thinking-in-lionagi/why-lionagi.md +0 -0
  124. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/_class_registry.py +0 -0
  125. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/_errors.py +0 -0
  126. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/adapters/__init__.py +0 -0
  127. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/adapters/_utils.py +0 -0
  128. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/adapters/async_postgres_adapter.py +0 -0
  129. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/config.py +0 -0
  130. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/fields/__init__.py +0 -0
  131. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/fields/action.py +0 -0
  132. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/fields/base.py +0 -0
  133. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/fields/code.py +0 -0
  134. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/fields/file.py +0 -0
  135. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/fields/instruct.py +0 -0
  136. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/fields/reason.py +0 -0
  137. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/fields/research.py +0 -0
  138. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/__init__.py +0 -0
  139. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/file/__init__.py +0 -0
  140. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/file/_utils.py +0 -0
  141. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/file/chunk.py +0 -0
  142. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/file/concat.py +0 -0
  143. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/file/concat_files.py +0 -0
  144. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/file/file_ops.py +0 -0
  145. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/file/process.py +0 -0
  146. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/file/save.py +0 -0
  147. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/schema/__init__.py +0 -0
  148. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/schema/as_readable.py +0 -0
  149. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/schema/extract_code_block.py +0 -0
  150. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/schema/extract_docstring.py +0 -0
  151. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/schema/function_to_schema.py +0 -0
  152. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/schema/load_pydantic_model_from_schema.py +0 -0
  153. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/validate/__init__.py +0 -0
  154. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/validate/common_field_validators.py +0 -0
  155. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/validate/to_num.py +0 -0
  156. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/libs/validate/validate_boolean.py +0 -0
  157. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/__init__.py +0 -0
  158. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/_async_call.py +0 -0
  159. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/_hash.py +0 -0
  160. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/_json_dump.py +0 -0
  161. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/_list_call.py +0 -0
  162. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/_to_list.py +0 -0
  163. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/_utils.py +0 -0
  164. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/concurrency/__init__.py +0 -0
  165. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/concurrency/_compat.py +0 -0
  166. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/concurrency/cancel.py +0 -0
  167. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/concurrency/errors.py +0 -0
  168. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/concurrency/patterns.py +0 -0
  169. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/concurrency/primitives.py +0 -0
  170. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/concurrency/resource_tracker.py +0 -0
  171. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/concurrency/task.py +0 -0
  172. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/concurrency/throttle.py +0 -0
  173. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/concurrency/utils.py +0 -0
  174. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/fuzzy/__init__.py +0 -0
  175. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/fuzzy/_extract_json.py +0 -0
  176. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/fuzzy/_fuzzy_json.py +0 -0
  177. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/fuzzy/_fuzzy_match.py +0 -0
  178. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/fuzzy/_fuzzy_validate.py +0 -0
  179. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/fuzzy/_string_similarity.py +0 -0
  180. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/fuzzy/_to_dict.py +0 -0
  181. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/ln/types.py +0 -0
  182. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/models/__init__.py +0 -0
  183. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/models/field_model.py +0 -0
  184. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/models/hashable_model.py +0 -0
  185. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/models/model_params.py +0 -0
  186. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/models/operable_model.py +0 -0
  187. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/models/schema_model.py +0 -0
  188. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/ReAct/ReAct.py +0 -0
  189. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/ReAct/__init__.py +0 -0
  190. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/ReAct/utils.py +0 -0
  191. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/__init__.py +0 -0
  192. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/_act/__init__.py +0 -0
  193. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/_act/act.py +0 -0
  194. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/_visualize_graph.py +0 -0
  195. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/brainstorm/__init__.py +0 -0
  196. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/brainstorm/brainstorm.py +0 -0
  197. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/brainstorm/prompt.py +0 -0
  198. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/builder.py +0 -0
  199. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/chat/__init__.py +0 -0
  200. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/chat/chat.py +0 -0
  201. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/communicate/__init__.py +0 -0
  202. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/communicate/communicate.py +0 -0
  203. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/instruct/__init__.py +0 -0
  204. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/instruct/instruct.py +0 -0
  205. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/interpret/__init__.py +0 -0
  206. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/interpret/interpret.py +0 -0
  207. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/manager.py +0 -0
  208. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/node.py +0 -0
  209. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/operate/__init__.py +0 -0
  210. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/operate/operate.py +0 -0
  211. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/parse/__init__.py +0 -0
  212. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/parse/parse.py +0 -0
  213. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/plan/__init__.py +0 -0
  214. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/plan/plan.py +0 -0
  215. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/plan/prompt.py +0 -0
  216. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/select/__init__.py +0 -0
  217. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/select/select.py +0 -0
  218. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/select/utils.py +0 -0
  219. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/types.py +0 -0
  220. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/operations/utils.py +0 -0
  221. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/__init__.py +0 -0
  222. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/_concepts.py +0 -0
  223. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/action/__init__.py +0 -0
  224. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/action/function_calling.py +0 -0
  225. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/action/manager.py +0 -0
  226. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/action/tool.py +0 -0
  227. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/contracts.py +0 -0
  228. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/forms/__init__.py +0 -0
  229. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/forms/base.py +0 -0
  230. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/forms/flow.py +0 -0
  231. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/forms/form.py +0 -0
  232. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/forms/report.py +0 -0
  233. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/generic/__init__.py +0 -0
  234. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/generic/element.py +0 -0
  235. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/generic/event.py +0 -0
  236. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/generic/log.py +0 -0
  237. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/generic/pile.py +0 -0
  238. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/generic/processor.py +0 -0
  239. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/generic/progression.py +0 -0
  240. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/graph/__init__.py +0 -0
  241. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/graph/edge.py +0 -0
  242. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/graph/graph.py +0 -0
  243. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/ids.py +0 -0
  244. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/mail/__init__.py +0 -0
  245. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/mail/exchange.py +0 -0
  246. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/mail/mail.py +0 -0
  247. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/mail/mailbox.py +0 -0
  248. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/mail/manager.py +0 -0
  249. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/mail/package.py +0 -0
  250. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/messages/__init__.py +0 -0
  251. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/messages/action_request.py +0 -0
  252. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/messages/action_response.py +0 -0
  253. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/messages/assistant_response.py +0 -0
  254. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/messages/base.py +0 -0
  255. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/messages/instruction.py +0 -0
  256. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/messages/manager.py +0 -0
  257. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/messages/message.py +0 -0
  258. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/messages/system.py +0 -0
  259. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/messages/templates/README.md +0 -0
  260. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
  261. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
  262. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
  263. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
  264. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
  265. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
  266. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/operatives/__init__.py +0 -0
  267. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/operatives/operative.py +0 -0
  268. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/operatives/step.py +0 -0
  269. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/protocols/types.py +0 -0
  270. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/py.typed +0 -0
  271. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/connections/__init__.py +0 -0
  272. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/connections/endpoint.py +0 -0
  273. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/connections/endpoint_config.py +0 -0
  274. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/connections/header_factory.py +0 -0
  275. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/connections/match_endpoint.py +0 -0
  276. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/connections/providers/__init__.py +0 -0
  277. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/connections/providers/anthropic_.py +0 -0
  278. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/connections/providers/claude_code_cli.py +0 -0
  279. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/connections/providers/exa_.py +0 -0
  280. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/connections/providers/nvidia_nim_.py +0 -0
  281. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/connections/providers/oai_.py +0 -0
  282. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/connections/providers/ollama_.py +0 -0
  283. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/connections/providers/perplexity_.py +0 -0
  284. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/connections/providers/types.py +0 -0
  285. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/hooks/__init__.py +0 -0
  286. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/hooks/_types.py +0 -0
  287. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/hooks/_utils.py +0 -0
  288. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/hooks/hook_event.py +0 -0
  289. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/hooks/hook_registry.py +0 -0
  290. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/imodel.py +0 -0
  291. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/manager.py +0 -0
  292. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/rate_limited_processor.py +0 -0
  293. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/resilience.py +0 -0
  294. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/third_party/README.md +0 -0
  295. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/third_party/__init__.py +0 -0
  296. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/third_party/anthropic_models.py +0 -0
  297. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/third_party/claude_code.py +0 -0
  298. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/third_party/exa_models.py +0 -0
  299. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/third_party/openai_model_names.py +0 -0
  300. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/third_party/pplx_models.py +0 -0
  301. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/service/token_calculator.py +0 -0
  302. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/session/__init__.py +0 -0
  303. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/session/branch.py +0 -0
  304. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/session/prompts.py +0 -0
  305. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/settings.py +0 -0
  306. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/tools/__init__.py +0 -0
  307. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/tools/base.py +0 -0
  308. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/tools/file/__init__.py +0 -0
  309. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/tools/file/reader.py +0 -0
  310. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/tools/types.py +0 -0
  311. {lionagi-0.17.0 → lionagi-0.17.1}/lionagi/utils.py +0 -0
  312. {lionagi-0.17.0 → lionagi-0.17.1}/main.py +0 -0
  313. {lionagi-0.17.0 → lionagi-0.17.1}/mkdocs.yml +0 -0
  314. {lionagi-0.17.0 → lionagi-0.17.1}/scripts/README.md +0 -0
  315. {lionagi-0.17.0 → lionagi-0.17.1}/scripts/update_openai_models.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lionagi
3
- Version: 0.17.0
3
+ Version: 0.17.1
4
4
  Summary: An Intelligence Operating System.
5
5
  Author-email: HaiyangLi <quantocean.li@gmail.com>
6
6
  License: Apache License
@@ -225,7 +225,10 @@ Requires-Dist: anyio>=4.7.0
225
225
  Requires-Dist: backoff>=2.0.0
226
226
  Requires-Dist: jinja2>=3.0.0
227
227
  Requires-Dist: json-repair>=0.40.0
228
+ Requires-Dist: matplotlib>=3.10.3
228
229
  Requires-Dist: msgspec>=0.18.0
230
+ Requires-Dist: pandas>=2.3.1
231
+ Requires-Dist: psutil>=7.0.0
229
232
  Requires-Dist: pydantic-settings>=2.8.0
230
233
  Requires-Dist: pydantic>=2.8.0
231
234
  Requires-Dist: pydapter>=1.1.1
@@ -0,0 +1,54 @@
1
+ # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ import logging
6
+
7
+ from pydantic import BaseModel, Field
8
+
9
+ # Eager imports for commonly used components
10
+ from . import ln as ln
11
+ from .operations.node import Operation
12
+ from .service.imodel import iModel
13
+ from .session.session import Branch, Session
14
+ from .version import __version__
15
+
16
+ logger = logging.getLogger(__name__)
17
+ logger.setLevel(logging.INFO)
18
+
19
+ # Module-level lazy loading cache
20
+ _lazy_imports = {}
21
+
22
+
23
+ def __getattr__(name: str):
24
+ """Lazy loading for expensive imports."""
25
+ if name in _lazy_imports:
26
+ return _lazy_imports[name]
27
+
28
+ if name == "types":
29
+ from . import _types as types
30
+
31
+ _lazy_imports["types"] = types
32
+ return types
33
+ elif name == "Builder":
34
+ from .operations.builder import OperationGraphBuilder as Builder
35
+
36
+ _lazy_imports["Builder"] = Builder
37
+ return Builder
38
+
39
+ raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
40
+
41
+
42
+ __all__ = (
43
+ "Session",
44
+ "Branch",
45
+ "iModel",
46
+ "types",
47
+ "__version__",
48
+ "BaseModel",
49
+ "Field",
50
+ "logger",
51
+ "Builder",
52
+ "Operation",
53
+ "ln",
54
+ )
@@ -0,0 +1,47 @@
1
+ # Lazy loading for heavy type imports to improve startup performance
2
+ _lazy_type_imports = {}
3
+
4
+
5
+ def __getattr__(name: str):
6
+ """Lazy loading for type definitions."""
7
+ if name in _lazy_type_imports:
8
+ return _lazy_type_imports[name]
9
+
10
+ # Import from fields
11
+ try:
12
+ from .fields import __all__ as fields_all
13
+
14
+ if name in fields_all:
15
+ from . import fields
16
+
17
+ attr = getattr(fields, name)
18
+ _lazy_type_imports[name] = attr
19
+ return attr
20
+ except (ImportError, AttributeError):
21
+ pass
22
+
23
+ # Import from models
24
+ try:
25
+ from .models import __all__ as models_all
26
+
27
+ if name in models_all:
28
+ from . import models
29
+
30
+ attr = getattr(models, name)
31
+ _lazy_type_imports[name] = attr
32
+ return attr
33
+ except (ImportError, AttributeError):
34
+ pass
35
+
36
+ # Import from protocols.types
37
+ try:
38
+ from .protocols import types as protocol_types
39
+
40
+ if hasattr(protocol_types, name):
41
+ attr = getattr(protocol_types, name)
42
+ _lazy_type_imports[name] = attr
43
+ return attr
44
+ except (ImportError, AttributeError):
45
+ pass
46
+
47
+ raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
@@ -549,3 +549,94 @@ async def flow(
549
549
  )
550
550
 
551
551
  return await executor.execute()
552
+
553
+
554
+ def cleanup_flow_results(
555
+ result: dict[str, Any], keep_only: list[str] = None
556
+ ) -> dict[str, Any]:
557
+ """
558
+ Clean up flow execution results to reduce memory usage.
559
+
560
+ Args:
561
+ result: Flow execution result dictionary
562
+ keep_only: List of operation IDs to keep results for (optional)
563
+
564
+ Returns:
565
+ Modified result dictionary with reduced memory footprint
566
+ """
567
+ if not isinstance(result, dict) or "operation_results" not in result:
568
+ return result
569
+
570
+ # If keep_only is specified, only keep those results
571
+ if keep_only is not None:
572
+ filtered_results = {
573
+ op_id: res
574
+ for op_id, res in result["operation_results"].items()
575
+ if op_id in keep_only
576
+ }
577
+ result["operation_results"] = filtered_results
578
+ # Update completed_operations to match
579
+ result["completed_operations"] = [
580
+ op_id
581
+ for op_id in result.get("completed_operations", [])
582
+ if op_id in keep_only
583
+ ]
584
+ else:
585
+ # Clear all results to free memory
586
+ result["operation_results"] = {}
587
+ result["completed_operations"] = []
588
+
589
+ return result
590
+
591
+
592
+ async def flow_with_cleanup(
593
+ session: "Session",
594
+ graph: "Graph",
595
+ context: dict[str, Any] | None = None,
596
+ parallel: bool = True,
597
+ max_concurrent: int = 5,
598
+ verbose: bool = False,
599
+ branch: "Branch" = None,
600
+ alcall_params: AlcallParams | None = None,
601
+ cleanup_results: bool = True,
602
+ keep_only: list[str] = None,
603
+ ) -> dict[str, Any]:
604
+ """
605
+ Execute flow with automatic cleanup to prevent memory accumulation.
606
+
607
+ Args:
608
+ session: Session instance for branch management
609
+ graph: Operation graph to execute
610
+ context: Initial context data
611
+ parallel: Execute independent operations in parallel
612
+ max_concurrent: Max concurrent operations (1 if not parallel)
613
+ verbose: Enable verbose logging
614
+ branch: Default branch for operations
615
+ alcall_params: Parameters for async parallel call execution
616
+ cleanup_results: Whether to clean up operation results after execution
617
+ keep_only: List of operation IDs to keep results for (if cleanup_results=True)
618
+
619
+ Returns:
620
+ Execution results (potentially with cleaned up memory footprint)
621
+ """
622
+ # Execute the flow normally
623
+ result = await flow(
624
+ session=session,
625
+ graph=graph,
626
+ context=context,
627
+ parallel=parallel,
628
+ max_concurrent=max_concurrent,
629
+ verbose=verbose,
630
+ branch=branch,
631
+ alcall_params=alcall_params,
632
+ )
633
+
634
+ # Clean up session memory
635
+ if hasattr(session, "cleanup_memory"):
636
+ session.cleanup_memory()
637
+
638
+ # Clean up results if requested
639
+ if cleanup_results:
640
+ result = cleanup_flow_results(result, keep_only=keep_only)
641
+
642
+ return result
@@ -62,6 +62,10 @@ class Node(Element, Relational, AsyncAdaptable, Adaptable):
62
62
  async def adapt_to_async(
63
63
  self, obj_key: str, many=False, **kwargs: Any
64
64
  ) -> Any:
65
+ # Only register postgres adapter if this specific operation needs it
66
+ if obj_key == "lionagi_async_pg":
67
+ _ensure_postgres_adapter()
68
+
65
69
  kwargs["adapt_meth"] = "to_dict"
66
70
  kwargs["adapt_kw"] = {"mode": "db"}
67
71
  return await super().adapt_to_async(
@@ -76,6 +80,10 @@ class Node(Element, Relational, AsyncAdaptable, Adaptable):
76
80
  many=False,
77
81
  **kwargs: Any,
78
82
  ) -> Node:
83
+ # Only register postgres adapter if this specific operation needs it
84
+ if obj_key == "lionagi_async_pg":
85
+ _ensure_postgres_adapter()
86
+
79
87
  kwargs["adapt_meth"] = "from_dict"
80
88
  return await super().adapt_from_async(
81
89
  obj, obj_key=obj_key, many=many, **kwargs
@@ -122,20 +130,31 @@ class Node(Element, Relational, AsyncAdaptable, Adaptable):
122
130
  return value
123
131
 
124
132
 
133
+ def _ensure_postgres_adapter():
134
+ """Lazy registration of postgres adapter when needed"""
135
+ if not hasattr(Node, "_postgres_adapter_checked"):
136
+ from lionagi.adapters._utils import check_async_postgres_available
137
+
138
+ if check_async_postgres_available() is True:
139
+ try:
140
+ from lionagi.adapters.async_postgres_adapter import (
141
+ LionAGIAsyncPostgresAdapter,
142
+ )
143
+
144
+ Node.register_async_adapter(LionAGIAsyncPostgresAdapter)
145
+ except ImportError:
146
+ pass # Graceful degradation if postgres dependencies missing
147
+ Node._postgres_adapter_checked = True
148
+
149
+
125
150
  if not _ADAPATER_REGISTERED:
126
151
  from pydapter.adapters import JsonAdapter, TomlAdapter
127
152
 
128
153
  Node.register_adapter(JsonAdapter)
129
154
  Node.register_adapter(TomlAdapter)
130
155
 
131
- from lionagi.adapters._utils import check_async_postgres_available
132
-
133
- if check_async_postgres_available() is True:
134
- from lionagi.adapters.async_postgres_adapter import (
135
- LionAGIAsyncPostgresAdapter,
136
- )
137
-
138
- Node.register_async_adapter(LionAGIAsyncPostgresAdapter)
156
+ # PostgreSQL adapter registration is now lazy - only loaded when needed
157
+ # Call _ensure_postgres_adapter() in methods that actually use async adapters
139
158
 
140
159
  _ADAPATER_REGISTERED = True
141
160
 
@@ -1,10 +1,28 @@
1
+ # Eager imports for core functionality
1
2
  from .connections.api_calling import APICalling
2
3
  from .connections.endpoint import Endpoint, EndpointConfig
3
4
  from .hooks import *
4
5
  from .imodel import iModel
5
6
  from .manager import iModelManager
6
7
  from .rate_limited_processor import RateLimitedAPIExecutor
7
- from .token_calculator import TokenCalculator
8
+
9
+ # Lazy loading cache
10
+ _lazy_imports = {}
11
+
12
+
13
+ def __getattr__(name: str):
14
+ """Lazy loading for heavy service imports."""
15
+ if name in _lazy_imports:
16
+ return _lazy_imports[name]
17
+
18
+ if name == "TokenCalculator":
19
+ from .token_calculator import TokenCalculator
20
+
21
+ _lazy_imports["TokenCalculator"] = TokenCalculator
22
+ return TokenCalculator
23
+
24
+ raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
25
+
8
26
 
9
27
  __all__ = (
10
28
  "APICalling",
@@ -12,10 +12,17 @@ from typing_extensions import Self
12
12
  from lionagi.protocols.generic.event import Event, EventStatus
13
13
  from lionagi.protocols.types import Log
14
14
  from lionagi.service.hooks import HookEvent, HookEventTypes, global_hook_logger
15
- from lionagi.service.token_calculator import TokenCalculator
16
15
 
17
16
  from .endpoint import Endpoint
18
17
 
18
+
19
+ # Lazy import for TokenCalculator
20
+ def _get_token_calculator():
21
+ from lionagi.service.token_calculator import TokenCalculator
22
+
23
+ return TokenCalculator
24
+
25
+
19
26
  logger = logging.getLogger(__name__)
20
27
 
21
28
 
@@ -129,7 +136,7 @@ class APICalling(Event):
129
136
 
130
137
  # Handle chat completions format
131
138
  if "messages" in self.payload:
132
- return TokenCalculator.calculate_message_tokens(
139
+ return _get_token_calculator().calculate_message_tokens(
133
140
  self.payload["messages"], **self.payload
134
141
  )
135
142
  # Handle responses API format
@@ -150,12 +157,14 @@ class APICalling(Event):
150
157
  messages.append(item)
151
158
  else:
152
159
  return None
153
- return TokenCalculator.calculate_message_tokens(
160
+ return _get_token_calculator().calculate_message_tokens(
154
161
  messages, **self.payload
155
162
  )
156
163
  # Handle embeddings endpoint
157
164
  elif "embed" in self.endpoint.config.endpoint:
158
- return TokenCalculator.calculate_embed_token(**self.payload)
165
+ return _get_token_calculator().calculate_embed_token(
166
+ **self.payload
167
+ )
159
168
 
160
169
  return None
161
170
 
@@ -2,6 +2,7 @@
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
 
5
+ # Eager imports for core functionality
5
6
  from .connections.api_calling import APICalling
6
7
  from .connections.endpoint import Endpoint, EndpointConfig
7
8
  from .connections.providers.types import *
@@ -9,7 +10,24 @@ from .hooks import *
9
10
  from .imodel import iModel
10
11
  from .manager import iModelManager
11
12
  from .rate_limited_processor import RateLimitedAPIExecutor
12
- from .token_calculator import TokenCalculator
13
+
14
+ # Lazy loading cache
15
+ _lazy_imports = {}
16
+
17
+
18
+ def __getattr__(name: str):
19
+ """Lazy loading for heavy service imports."""
20
+ if name in _lazy_imports:
21
+ return _lazy_imports[name]
22
+
23
+ if name == "TokenCalculator":
24
+ from .token_calculator import TokenCalculator
25
+
26
+ _lazy_imports["TokenCalculator"] = TokenCalculator
27
+ return TokenCalculator
28
+
29
+ raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
30
+
13
31
 
14
32
  __all__ = (
15
33
  "APICalling",
@@ -416,6 +416,48 @@ class Session(Node, Communicatable, Relational):
416
416
  alcall_params=alcall_params,
417
417
  )
418
418
 
419
+ def cleanup_memory(
420
+ self, clear_branches: bool = True, clear_mail: bool = True
421
+ ):
422
+ """
423
+ Clean up session memory to prevent memory accumulation.
424
+
425
+ Args:
426
+ clear_branches: Whether to clear branch logs and memory
427
+ clear_mail: Whether to clear mail transfer history
428
+ """
429
+ if clear_branches and self.branches:
430
+ for branch in self.branches:
431
+ if hasattr(branch, "dump_logs"):
432
+ branch.dump_logs(clear=True)
433
+
434
+ if clear_mail and self.mail_transfer:
435
+ # Clear mail transfer history if available
436
+ if hasattr(self.mail_transfer, "clear"):
437
+ self.mail_transfer.clear()
438
+
439
+ async def acleanup_memory(
440
+ self, clear_branches: bool = True, clear_mail: bool = True
441
+ ):
442
+ """
443
+ Asynchronously clean up session memory to prevent memory accumulation.
444
+
445
+ Args:
446
+ clear_branches: Whether to clear branch logs and memory
447
+ clear_mail: Whether to clear mail transfer history
448
+ """
449
+ if clear_branches and self.branches:
450
+ for branch in self.branches:
451
+ if hasattr(branch, "adump_logs"):
452
+ await branch.adump_logs(clear=True)
453
+
454
+ if clear_mail and self.mail_transfer:
455
+ # Clear mail transfer history if available
456
+ if hasattr(self.mail_transfer, "aclear"):
457
+ await self.mail_transfer.aclear()
458
+ elif hasattr(self.mail_transfer, "clear"):
459
+ self.mail_transfer.clear()
460
+
419
461
 
420
462
  __all__ = ["Session"]
421
463
  # File: autoos/session/session.py
@@ -0,0 +1 @@
1
+ __version__ = "0.17.1"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "lionagi"
3
- version = "0.17.0"
3
+ version = "0.17.1"
4
4
  description = "An Intelligence Operating System."
5
5
  authors = [
6
6
  { name = "HaiyangLi", email = "quantocean.li@gmail.com" },
@@ -14,7 +14,10 @@ dependencies = [
14
14
  "backoff>=2.0.0",
15
15
  "jinja2>=3.0.0",
16
16
  "json-repair>=0.40.0",
17
+ "matplotlib>=3.10.3",
17
18
  "msgspec>=0.18.0",
19
+ "pandas>=2.3.1",
20
+ "psutil>=7.0.0",
18
21
  "pydantic>=2.8.0",
19
22
  "pydantic-settings>=2.8.0",
20
23
  "pydapter>=1.1.1",
@@ -61,6 +64,8 @@ dev = [
61
64
  "mkdocstrings>=0.30.0",
62
65
  "mkdocstrings-python>=1.17.0",
63
66
  "trio>=0.30.0",
67
+ "line-profiler>=5.0.0",
68
+ "memory-profiler>=0.61.0",
64
69
  ]
65
70
 
66
71
  [project.optional-dependencies]
@@ -2050,9 +2050,51 @@ wheels = [
2050
2050
  { url = "https://files.pythonhosted.org/packages/83/60/d497a310bde3f01cb805196ac61b7ad6dc5dcf8dce66634dc34364b20b4f/lazy_loader-0.4-py3-none-any.whl", hash = "sha256:342aa8e14d543a154047afb4ba8ef17f5563baad3fc610d7b15b213b0f119efc", size = 12097, upload-time = "2024-04-05T13:03:10.514Z" },
2051
2051
  ]
2052
2052
 
2053
+ [[package]]
2054
+ name = "line-profiler"
2055
+ version = "5.0.0"
2056
+ source = { registry = "https://pypi.org/simple" }
2057
+ dependencies = [
2058
+ { name = "tomli", marker = "python_full_version < '3.11'" },
2059
+ ]
2060
+ sdist = { url = "https://files.pythonhosted.org/packages/ea/5c/bbe9042ef5cf4c6cad4bf4d6f7975193430eba9191b7278ea114a3993fbb/line_profiler-5.0.0.tar.gz", hash = "sha256:a80f0afb05ba0d275d9dddc5ff97eab637471167ff3e66dcc7d135755059398c", size = 376919, upload-time = "2025-07-23T20:15:41.819Z" }
2061
+ wheels = [
2062
+ { url = "https://files.pythonhosted.org/packages/3e/b8/8eb2bd10873a7bb93f412db8f735ff5b708bfcedef6492f2ec0a1f4dc55a/line_profiler-5.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5cd1621ff77e1f3f423dcc2611ef6fba462e791ce01fb41c95dce6d519c48ec8", size = 631005, upload-time = "2025-07-23T20:14:25.307Z" },
2063
+ { url = "https://files.pythonhosted.org/packages/36/af/a7fd6b2a83fbc10427e1fdd178a0a80621eeb3b29256b1856d459abb7d2a/line_profiler-5.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:17a44491d16309bc39fc6197b376a120ebc52adc3f50b0b6f9baf99af3124406", size = 490943, upload-time = "2025-07-23T20:14:27.396Z" },
2064
+ { url = "https://files.pythonhosted.org/packages/be/50/dcfc2e5386f5b3177cdad8eaa912482fe6a9218149a5cb5e85e871b55f2c/line_profiler-5.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a36a9a5ea5e37b0969a451f922b4dbb109350981187317f708694b3b5ceac3a5", size = 476487, upload-time = "2025-07-23T20:14:30.818Z" },
2065
+ { url = "https://files.pythonhosted.org/packages/c6/0c/cdcfc640d5b3338891cd336b465c6112d9d5c2f56ced4f9ea3e795b192c6/line_profiler-5.0.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b67e6e292efaf85d9678fe29295b46efd72c0d363b38e6b424df39b6553c49b3", size = 1412553, upload-time = "2025-07-23T20:14:32.07Z" },
2066
+ { url = "https://files.pythonhosted.org/packages/ca/23/bcdf3adf487917cfe431cb009b184c1a81a5099753747fe1a4aee42493f0/line_profiler-5.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9c92c28ee16bf3ba99966854407e4bc927473a925c1629489c8ebc01f8a640", size = 1461495, upload-time = "2025-07-23T20:14:33.396Z" },
2067
+ { url = "https://files.pythonhosted.org/packages/ec/04/1360ff19c4c426352ed820bba315670a6d52b3194fcb80af550a50e09310/line_profiler-5.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:51609cc264df6315cd9b9fa76d822a7b73a4f278dcab90ba907e32dc939ab1c2", size = 2510352, upload-time = "2025-07-23T20:14:34.797Z" },
2068
+ { url = "https://files.pythonhosted.org/packages/11/af/138966a6edfd95208e92e9cfef79595d6890df31b1749cc0244d36127473/line_profiler-5.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:67f9721281655dc2b6763728a63928e3b8a35dfd6160c628a3c599afd0814a71", size = 2445103, upload-time = "2025-07-23T20:14:36.19Z" },
2069
+ { url = "https://files.pythonhosted.org/packages/92/95/5c9e4771f819b4d81510fa90b20a608bd3f91c268acd72747cd09f905de9/line_profiler-5.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:c2c27ac0c30d35ca1de5aeebe97e1d9c0d582e3d2c4146c572a648bec8efcfac", size = 461940, upload-time = "2025-07-23T20:14:37.422Z" },
2070
+ { url = "https://files.pythonhosted.org/packages/ef/f7/4e0fd2610749136d60f3e168812b5f6c697ffcfbb167b10d4aac24af1223/line_profiler-5.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f32d536c056393b7ca703e459632edc327ff9e0fc320c7b0e0ed14b84d342b7f", size = 634587, upload-time = "2025-07-23T20:14:39.069Z" },
2071
+ { url = "https://files.pythonhosted.org/packages/d7/fe/b5458452c2dbf7a9590b5ad3cf4250710a2554a5a045bfa6395cdea1b2d5/line_profiler-5.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a7da04ffc5a0a1f6653f43b13ad2e7ebf66f1d757174b7e660dfa0cbe74c4fc6", size = 492744, upload-time = "2025-07-23T20:14:40.632Z" },
2072
+ { url = "https://files.pythonhosted.org/packages/4c/e1/b69e20aeea8a11340f8c5d540c88ecf955a3559d8fbd5034cfe5677c69cf/line_profiler-5.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d2746f6b13c19ca4847efd500402d53a5ebb2fe31644ce8af74fbeac5ea4c54c", size = 478101, upload-time = "2025-07-23T20:14:42.306Z" },
2073
+ { url = "https://files.pythonhosted.org/packages/0d/3b/b29e5539b2c98d2bd9f5651f10597dd70e07d5b09bb47cc0aa8d48927d72/line_profiler-5.0.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b4290319a59730c04cbd03755472d10524130065a20a695dc10dd66ffd92172", size = 1455927, upload-time = "2025-07-23T20:14:44.139Z" },
2074
+ { url = "https://files.pythonhosted.org/packages/82/1d/dcc75d2cf82bbe6ef65d0f39cc32410e099e7e1cd7f85b121a8d440ce8bc/line_profiler-5.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cd168a8af0032e8e3cb2fbb9ffc7694cdcecd47ec356ae863134df07becb3a2", size = 1508770, upload-time = "2025-07-23T20:14:45.868Z" },
2075
+ { url = "https://files.pythonhosted.org/packages/cc/9f/cbf9d011381c878f848f824190ad833fbfeb5426eb6c42811b5b759d5d54/line_profiler-5.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:cbe7b095865d00dda0f53d7d4556c2b1b5d13f723173a85edb206a78779ee07a", size = 2551269, upload-time = "2025-07-23T20:14:47.279Z" },
2076
+ { url = "https://files.pythonhosted.org/packages/7c/86/06999bff316e2522fc1d11fcd3720be81a7c47e94c785a9d93c290ae0415/line_profiler-5.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ff176045ea8a9e33900856db31b0b979357c337862ae4837140c98bd3161c3c7", size = 2491091, upload-time = "2025-07-23T20:14:48.637Z" },
2077
+ { url = "https://files.pythonhosted.org/packages/61/d1/758f2f569b5d4fdc667b88e88e7424081ba3a1d17fb531042ed7f0f08d7f/line_profiler-5.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:474e0962d02123f1190a804073b308a67ef5f9c3b8379184483d5016844a00df", size = 462954, upload-time = "2025-07-23T20:14:50.094Z" },
2078
+ { url = "https://files.pythonhosted.org/packages/73/d8/383c37c36f888c4ca82a28ffea27c589988463fc3f0edd6abae221c35275/line_profiler-5.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:729b18c0ac66b3368ade61203459219c202609f76b34190cbb2508b8e13998c8", size = 628109, upload-time = "2025-07-23T20:14:51.71Z" },
2079
+ { url = "https://files.pythonhosted.org/packages/54/a3/75a27b1f3e14ae63a2e99f3c7014dbc1e3a37f56c91b63a2fc171e72990d/line_profiler-5.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:438ed24278c428119473b61a473c8fe468ace7c97c94b005cb001137bc624547", size = 489142, upload-time = "2025-07-23T20:14:52.993Z" },
2080
+ { url = "https://files.pythonhosted.org/packages/8b/85/f65cdbfe8537da6fab97c42958109858df846563546b9c234a902a98c313/line_profiler-5.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:920b0076dca726caadbf29f0bfcce0cbcb4d9ff034cd9445a7308f9d556b4b3a", size = 475838, upload-time = "2025-07-23T20:14:54.637Z" },
2081
+ { url = "https://files.pythonhosted.org/packages/0c/ea/cfa53c8ede0ef539cfe767a390d7ccfc015f89c39cc2a8c34e77753fd023/line_profiler-5.0.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53326eaad2d807487dcd45d2e385feaaed81aaf72b9ecd4f53c1a225d658006f", size = 1402290, upload-time = "2025-07-23T20:14:56.775Z" },
2082
+ { url = "https://files.pythonhosted.org/packages/e4/2c/3467cd5051afbc0eb277ee426e8dffdbd1fcdd82f1bc95a0cd8945b6c106/line_profiler-5.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e3995a989cdea022f0ede5db19a6ab527f818c59ffcebf4e5f7a8be4eb8e880", size = 1457827, upload-time = "2025-07-23T20:14:58.158Z" },
2083
+ { url = "https://files.pythonhosted.org/packages/d9/87/d5039608979b37ce3dadfa3eed7bf8bfec53b645acd30ca12c8088cf738d/line_profiler-5.0.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8bf57892a1d3a42273652506746ba9f620c505773ada804367c42e5b4146d6b6", size = 2497423, upload-time = "2025-07-23T20:15:01.015Z" },
2084
+ { url = "https://files.pythonhosted.org/packages/59/3e/e5e09699e2841b4f41c16d01ff2adfd20fde6cb73cfa512262f0421e15e0/line_profiler-5.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:43672085f149f5fbf3f08bba072ad7014dd485282e8665827b26941ea97d2d76", size = 2439733, upload-time = "2025-07-23T20:15:02.582Z" },
2085
+ { url = "https://files.pythonhosted.org/packages/d0/cf/18d8fefabd8a56fb963f944149cadb69be67a479ce6723275cae2c943af5/line_profiler-5.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:446bd4f04e4bd9e979d68fdd916103df89a9d419e25bfb92b31af13c33808ee0", size = 460852, upload-time = "2025-07-23T20:15:03.827Z" },
2086
+ { url = "https://files.pythonhosted.org/packages/7d/eb/bc4420cf68661406c98d590656d72eed6f7d76e45accf568802dc83615ef/line_profiler-5.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9873fabbae1587778a551176758a70a5f6c89d8d070a1aca7a689677d41a1348", size = 624828, upload-time = "2025-07-23T20:15:05.315Z" },
2087
+ { url = "https://files.pythonhosted.org/packages/f2/6e/6e0a4c1009975d27810027427d601acbad75b45947040d0fd80cec5b3e94/line_profiler-5.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2cd6cdb5a4d3b4ced607104dbed73ec820a69018decd1a90904854380536ed32", size = 487651, upload-time = "2025-07-23T20:15:06.961Z" },
2088
+ { url = "https://files.pythonhosted.org/packages/3b/2c/e60e61f24faa0e6eca375bdac9c4b4b37c3267488d7cb1a8c5bd74cf5cdc/line_profiler-5.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:34d6172a3bd14167b3ea2e629d71b08683b17b3bc6eb6a4936d74e3669f875b6", size = 474071, upload-time = "2025-07-23T20:15:08.607Z" },
2089
+ { url = "https://files.pythonhosted.org/packages/e1/d5/6f178e74746f84cc17381f607d191c54772207770d585fda773b868bfe28/line_profiler-5.0.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5edd859be322aa8252253e940ac1c60cca4c385760d90a402072f8f35e4b967", size = 1405434, upload-time = "2025-07-23T20:15:09.862Z" },
2090
+ { url = "https://files.pythonhosted.org/packages/9b/32/ce67bbf81e5c78cc8d606afe6a192fbef30395021b2aaffe15681e186e3f/line_profiler-5.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d4f97b223105eed6e525994f5653061bd981e04838ee5d14e01d17c26185094", size = 1467553, upload-time = "2025-07-23T20:15:11.195Z" },
2091
+ { url = "https://files.pythonhosted.org/packages/c1/c1/431ffb89a351aaa63f8358442e0b9456a3bb745cebdf9c0d7aa4d47affca/line_profiler-5.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4758007e491bee3be40ebcca460596e0e28e7f39b735264694a9cafec729dfa9", size = 2442489, upload-time = "2025-07-23T20:15:12.602Z" },
2092
+ { url = "https://files.pythonhosted.org/packages/ce/9d/e34cc99c8abca3a27911d3542a87361e9c292fa1258d182e4a0a5c442850/line_profiler-5.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:213b19c4b65942db5d477e603c18c76126e3811a39d8bab251d930d8ce82ffba", size = 461377, upload-time = "2025-07-23T20:15:13.871Z" },
2093
+ ]
2094
+
2053
2095
  [[package]]
2054
2096
  name = "lionagi"
2055
- version = "0.17.0"
2097
+ version = "0.17.1"
2056
2098
  source = { editable = "." }
2057
2099
  dependencies = [
2058
2100
  { name = "aiocache" },
@@ -2061,7 +2103,10 @@ dependencies = [
2061
2103
  { name = "backoff" },
2062
2104
  { name = "jinja2" },
2063
2105
  { name = "json-repair" },
2106
+ { name = "matplotlib" },
2064
2107
  { name = "msgspec" },
2108
+ { name = "pandas" },
2109
+ { name = "psutil" },
2065
2110
  { name = "pydantic" },
2066
2111
  { name = "pydantic-settings" },
2067
2112
  { name = "pydapter" },
@@ -2121,6 +2166,8 @@ dev = [
2121
2166
  { name = "ipython", version = "9.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
2122
2167
  { name = "ipywidgets" },
2123
2168
  { name = "isort" },
2169
+ { name = "line-profiler" },
2170
+ { name = "memory-profiler" },
2124
2171
  { name = "mkdocs" },
2125
2172
  { name = "mkdocs-git-committers-plugin-2" },
2126
2173
  { name = "mkdocs-git-revision-date-localized-plugin" },
@@ -2160,10 +2207,13 @@ requires-dist = [
2160
2207
  { name = "lionagi", extras = ["rich"], marker = "extra == 'all'" },
2161
2208
  { name = "lionagi", extras = ["schema"], marker = "extra == 'all'" },
2162
2209
  { name = "lionagi", extras = ["sqlite"], marker = "extra == 'all'" },
2210
+ { name = "matplotlib", specifier = ">=3.10.3" },
2163
2211
  { name = "matplotlib", marker = "extra == 'graph'", specifier = ">=3.7.0" },
2164
2212
  { name = "msgspec", specifier = ">=0.18.0" },
2165
2213
  { name = "networkx", marker = "extra == 'graph'", specifier = ">=3.0.0" },
2166
2214
  { name = "ollama", marker = "extra == 'ollama'", specifier = ">=0.4.0" },
2215
+ { name = "pandas", specifier = ">=2.3.1" },
2216
+ { name = "psutil", specifier = ">=7.0.0" },
2167
2217
  { name = "pydantic", specifier = ">=2.8.0" },
2168
2218
  { name = "pydantic-settings", specifier = ">=2.8.0" },
2169
2219
  { name = "pydapter", specifier = ">=1.1.1" },
@@ -2183,6 +2233,8 @@ dev = [
2183
2233
  { name = "ipython", specifier = ">=8.31.0" },
2184
2234
  { name = "ipywidgets", specifier = ">=8.1.5" },
2185
2235
  { name = "isort", specifier = ">=6.0.0" },
2236
+ { name = "line-profiler", specifier = ">=5.0.0" },
2237
+ { name = "memory-profiler", specifier = ">=0.61.0" },
2186
2238
  { name = "mkdocs", specifier = ">=1.6.1" },
2187
2239
  { name = "mkdocs-git-committers-plugin-2", specifier = ">=2.5.0" },
2188
2240
  { name = "mkdocs-git-revision-date-localized-plugin", specifier = ">=1.4.7" },
@@ -2467,6 +2519,18 @@ wheels = [
2467
2519
  { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
2468
2520
  ]
2469
2521
 
2522
+ [[package]]
2523
+ name = "memory-profiler"
2524
+ version = "0.61.0"
2525
+ source = { registry = "https://pypi.org/simple" }
2526
+ dependencies = [
2527
+ { name = "psutil" },
2528
+ ]
2529
+ sdist = { url = "https://files.pythonhosted.org/packages/b2/88/e1907e1ca3488f2d9507ca8b0ae1add7b1cd5d3ca2bc8e5b329382ea2c7b/memory_profiler-0.61.0.tar.gz", hash = "sha256:4e5b73d7864a1d1292fb76a03e82a3e78ef934d06828a698d9dada76da2067b0", size = 35935, upload-time = "2022-11-15T17:57:28.994Z" }
2530
+ wheels = [
2531
+ { url = "https://files.pythonhosted.org/packages/49/26/aaca612a0634ceede20682e692a6c55e35a94c21ba36b807cc40fe910ae1/memory_profiler-0.61.0-py3-none-any.whl", hash = "sha256:400348e61031e3942ad4d4109d18753b2fb08c2f6fb8290671c5513a34182d84", size = 31803, upload-time = "2022-11-15T17:57:27.031Z" },
2532
+ ]
2533
+
2470
2534
  [[package]]
2471
2535
  name = "mergedeep"
2472
2536
  version = "1.3.4"
@@ -1,32 +0,0 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
3
- # SPDX-License-Identifier: Apache-2.0
4
-
5
- import logging
6
-
7
- from pydantic import BaseModel, Field
8
-
9
- from . import _types as types
10
- from . import ln as ln
11
- from .operations.builder import OperationGraphBuilder as Builder
12
- from .operations.node import Operation
13
- from .service.imodel import iModel
14
- from .session.session import Branch, Session
15
- from .version import __version__
16
-
17
- logger = logging.getLogger(__name__)
18
- logger.setLevel(logging.INFO)
19
-
20
- __all__ = (
21
- "Session",
22
- "Branch",
23
- "iModel",
24
- "types",
25
- "__version__",
26
- "BaseModel",
27
- "Field",
28
- "logger",
29
- "Builder",
30
- "Operation",
31
- "ln",
32
- )
@@ -1,3 +0,0 @@
1
- from .fields import *
2
- from .models import *
3
- from .protocols.types import *
@@ -1 +0,0 @@
1
- __version__ = "0.17.0"
File without changes
File without changes
File without changes
File without changes