lionagi 0.15.0__tar.gz → 0.15.2__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 (313) hide show
  1. {lionagi-0.15.0 → lionagi-0.15.2}/PKG-INFO +2 -2
  2. {lionagi-0.15.0 → lionagi-0.15.2}/README.md +1 -1
  3. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/ln/_async_call.py +2 -1
  4. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/ln/_list_call.py +2 -1
  5. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/ln/_to_list.py +2 -1
  6. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/ln/_types.py +1 -1
  7. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/ln/concurrency/utils.py +2 -1
  8. lionagi-0.15.2/lionagi/operations/manager.py +23 -0
  9. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/node.py +2 -3
  10. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/generic/event.py +47 -6
  11. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/session/branch.py +11 -2
  12. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/session/session.py +80 -25
  13. lionagi-0.15.2/lionagi/version.py +1 -0
  14. {lionagi-0.15.0 → lionagi-0.15.2}/pyproject.toml +1 -1
  15. {lionagi-0.15.0 → lionagi-0.15.2}/uv.lock +1 -1
  16. lionagi-0.15.0/lionagi/operations/manager.py +0 -21
  17. lionagi-0.15.0/lionagi/version.py +0 -1
  18. {lionagi-0.15.0 → lionagi-0.15.2}/.coveragerc +0 -0
  19. {lionagi-0.15.0 → lionagi-0.15.2}/.env.example +0 -0
  20. {lionagi-0.15.0 → lionagi-0.15.2}/.github/FUNDING.yml +0 -0
  21. {lionagi-0.15.0 → lionagi-0.15.2}/.github/dependabot.yml +0 -0
  22. {lionagi-0.15.0 → lionagi-0.15.2}/.github/workflows/ci.yml +0 -0
  23. {lionagi-0.15.0 → lionagi-0.15.2}/.github/workflows/codeql.yml +0 -0
  24. {lionagi-0.15.0 → lionagi-0.15.2}/.github/workflows/docs.yml +0 -0
  25. {lionagi-0.15.0 → lionagi-0.15.2}/.github/workflows/release.yml +0 -0
  26. {lionagi-0.15.0 → lionagi-0.15.2}/.gitignore +0 -0
  27. {lionagi-0.15.0 → lionagi-0.15.2}/.pre-commit-config.yaml +0 -0
  28. {lionagi-0.15.0 → lionagi-0.15.2}/.python-version +0 -0
  29. {lionagi-0.15.0 → lionagi-0.15.2}/CODE_OF_CONDUCT.md +0 -0
  30. {lionagi-0.15.0 → lionagi-0.15.2}/CONTRIBUTING.md +0 -0
  31. {lionagi-0.15.0 → lionagi-0.15.2}/LICENSE +0 -0
  32. {lionagi-0.15.0 → lionagi-0.15.2}/assets/operation_builder.gif +0 -0
  33. {lionagi-0.15.0 → lionagi-0.15.2}/cookbooks/001_branch_converse.ipynb +0 -0
  34. {lionagi-0.15.0 → lionagi-0.15.2}/cookbooks/002_branch_interact.ipynb +0 -0
  35. {lionagi-0.15.0 → lionagi-0.15.2}/cookbooks/003_branch_info.ipynb +0 -0
  36. {lionagi-0.15.0 → lionagi-0.15.2}/cookbooks/004_conversation_patterns.ipynb +0 -0
  37. {lionagi-0.15.0 → lionagi-0.15.2}/cookbooks/005_react_basics.ipynb +0 -0
  38. {lionagi-0.15.0 → lionagi-0.15.2}/cookbooks/006_operation_graphs_claim_extraction.ipynb +0 -0
  39. {lionagi-0.15.0 → lionagi-0.15.2}/cookbooks/007_fan_out_in.py +0 -0
  40. {lionagi-0.15.0 → lionagi-0.15.2}/cookbooks/claude_proxy/README.md +0 -0
  41. {lionagi-0.15.0 → lionagi-0.15.2}/cookbooks/claude_proxy/claude_code_proxy.py +0 -0
  42. {lionagi-0.15.0 → lionagi-0.15.2}/cookbooks/claude_proxy/run_w_claude_code_proxy.ipynb +0 -0
  43. {lionagi-0.15.0 → lionagi-0.15.2}/cookbooks/data/002_comedian.json +0 -0
  44. {lionagi-0.15.0 → lionagi-0.15.2}/cookbooks/data/002_critic.json +0 -0
  45. {lionagi-0.15.0 → lionagi-0.15.2}/cookbooks/data/006_lion_proof_ch2.md +0 -0
  46. {lionagi-0.15.0 → lionagi-0.15.2}/cookbooks/using_claude_code.py +0 -0
  47. {lionagi-0.15.0 → lionagi-0.15.2}/docs/Makefile +0 -0
  48. {lionagi-0.15.0 → lionagi-0.15.2}/docs/_static/custom.css +0 -0
  49. {lionagi-0.15.0 → lionagi-0.15.2}/docs/_templates/layout.html +0 -0
  50. {lionagi-0.15.0 → lionagi-0.15.2}/docs/conf.py +0 -0
  51. {lionagi-0.15.0 → lionagi-0.15.2}/docs/discussions/anyio-migration.md +0 -0
  52. {lionagi-0.15.0 → lionagi-0.15.2}/docs/index.rst +0 -0
  53. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/action.rst +0 -0
  54. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/adapter.rst +0 -0
  55. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/branch.rst +0 -0
  56. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/branch_operations.rst +0 -0
  57. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/concepts.rst +0 -0
  58. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/element_id.rst +0 -0
  59. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/event.rst +0 -0
  60. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/form.rst +0 -0
  61. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/graph.rst +0 -0
  62. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/index.rst +0 -0
  63. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/instruct.rst +0 -0
  64. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/lib_file.rst +0 -0
  65. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/lib_nested.rst +0 -0
  66. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/lib_package.rst +0 -0
  67. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/lib_schema.rst +0 -0
  68. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/lib_validate.rst +0 -0
  69. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/log.rst +0 -0
  70. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/mail.rst +0 -0
  71. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/message.rst +0 -0
  72. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/models.rst +0 -0
  73. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/operative_step.rst +0 -0
  74. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/pile.rst +0 -0
  75. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/processor.rst +0 -0
  76. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/progression.rst +0 -0
  77. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/service.rst +0 -0
  78. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/session.rst +0 -0
  79. {lionagi-0.15.0 → lionagi-0.15.2}/docs/modules/utils.rst +0 -0
  80. {lionagi-0.15.0 → lionagi-0.15.2}/docs/tutorials/get_started.rst +0 -0
  81. {lionagi-0.15.0 → lionagi-0.15.2}/docs/tutorials/get_started_pt2.rst +0 -0
  82. {lionagi-0.15.0 → lionagi-0.15.2}/docs/tutorials/get_started_pt3.rst +0 -0
  83. {lionagi-0.15.0 → lionagi-0.15.2}/docs/tutorials/index.rst +0 -0
  84. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/__init__.py +0 -0
  85. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/_class_registry.py +0 -0
  86. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/_errors.py +0 -0
  87. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/_types.py +0 -0
  88. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/adapters/__init__.py +0 -0
  89. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/adapters/async_postgres_adapter.py +0 -0
  90. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/adapters/postgres_model_adapter.py +0 -0
  91. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/config.py +0 -0
  92. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/fields/__init__.py +0 -0
  93. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/fields/action.py +0 -0
  94. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/fields/base.py +0 -0
  95. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/fields/code.py +0 -0
  96. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/fields/file.py +0 -0
  97. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/fields/instruct.py +0 -0
  98. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/fields/reason.py +0 -0
  99. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/fields/research.py +0 -0
  100. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/__init__.py +0 -0
  101. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/concurrency.py +0 -0
  102. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/file/__init__.py +0 -0
  103. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/file/chunk.py +0 -0
  104. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/file/concat.py +0 -0
  105. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/file/concat_files.py +0 -0
  106. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/file/file_ops.py +0 -0
  107. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/file/params.py +0 -0
  108. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/file/process.py +0 -0
  109. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/file/save.py +0 -0
  110. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/nested/__init__.py +0 -0
  111. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/nested/flatten.py +0 -0
  112. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/nested/nfilter.py +0 -0
  113. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/nested/nget.py +0 -0
  114. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/nested/ninsert.py +0 -0
  115. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/nested/nmerge.py +0 -0
  116. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/nested/npop.py +0 -0
  117. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/nested/nset.py +0 -0
  118. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/nested/unflatten.py +0 -0
  119. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/nested/utils.py +0 -0
  120. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/package/__init__.py +0 -0
  121. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/package/imports.py +0 -0
  122. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/package/management.py +0 -0
  123. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/package/params.py +0 -0
  124. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/package/system.py +0 -0
  125. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/parse.py +0 -0
  126. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/schema/__init__.py +0 -0
  127. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/schema/as_readable.py +0 -0
  128. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/schema/extract_code_block.py +0 -0
  129. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/schema/extract_docstring.py +0 -0
  130. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/schema/function_to_schema.py +0 -0
  131. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/schema/json_schema.py +0 -0
  132. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/schema/load_pydantic_model_from_schema.py +0 -0
  133. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/__init__.py +0 -0
  134. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/base.py +0 -0
  135. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/llmlingua.py +0 -0
  136. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/perplexity.py +0 -0
  137. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/symbolic_compress_context.py +0 -0
  138. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/synthlang.py +0 -0
  139. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/synthlang_/base.py +0 -0
  140. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/abstract_algebra.toml +0 -0
  141. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/category_theory.toml +0 -0
  142. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/complex_analysis.toml +0 -0
  143. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/framework_options.json +0 -0
  144. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/group_theory.toml +0 -0
  145. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/math_logic.toml +0 -0
  146. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/reflective_patterns.toml +0 -0
  147. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/set_theory.toml +0 -0
  148. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/synthlang_/resources/frameworks/topology_fundamentals.toml +0 -0
  149. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/synthlang_/resources/mapping/lion_emoji_mapping.toml +0 -0
  150. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/synthlang_/resources/mapping/python_math_mapping.toml +0 -0
  151. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/synthlang_/resources/mapping/rust_chinese_mapping.toml +0 -0
  152. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/synthlang_/resources/utility/base_synthlang_system_prompt.toml +0 -0
  153. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/synthlang_/translate_to_synthlang.py +0 -0
  154. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/token_transform/types.py +0 -0
  155. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/unstructured/__init__.py +0 -0
  156. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/unstructured/pdf_to_image.py +0 -0
  157. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/unstructured/read_image_to_base64.py +0 -0
  158. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/validate/__init__.py +0 -0
  159. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/validate/common_field_validators.py +0 -0
  160. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/validate/fuzzy_match_keys.py +0 -0
  161. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/validate/fuzzy_validate_mapping.py +0 -0
  162. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/validate/string_similarity.py +0 -0
  163. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/validate/to_num.py +0 -0
  164. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/validate/validate_boolean.py +0 -0
  165. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/libs/validate/xml_parser.py +0 -0
  166. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/ln/__init__.py +0 -0
  167. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/ln/_hash.py +0 -0
  168. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/ln/_models.py +0 -0
  169. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/ln/concurrency/__init__.py +0 -0
  170. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/ln/concurrency/cancel.py +0 -0
  171. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/ln/concurrency/errors.py +0 -0
  172. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/ln/concurrency/patterns.py +0 -0
  173. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/ln/concurrency/primitives.py +0 -0
  174. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/ln/concurrency/resource_tracker.py +0 -0
  175. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/ln/concurrency/task.py +0 -0
  176. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/ln/concurrency/throttle.py +0 -0
  177. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/models/__init__.py +0 -0
  178. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/models/field_model.py +0 -0
  179. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/models/hashable_model.py +0 -0
  180. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/models/model_params.py +0 -0
  181. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/models/note.py +0 -0
  182. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/models/operable_model.py +0 -0
  183. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/models/schema_model.py +0 -0
  184. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/ReAct/ReAct.py +0 -0
  185. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/ReAct/__init__.py +0 -0
  186. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/ReAct/utils.py +0 -0
  187. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/__init__.py +0 -0
  188. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/_act/__init__.py +0 -0
  189. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/_act/act.py +0 -0
  190. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/brainstorm/__init__.py +0 -0
  191. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/brainstorm/brainstorm.py +0 -0
  192. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/brainstorm/prompt.py +0 -0
  193. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/builder.py +0 -0
  194. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/chat/__init__.py +0 -0
  195. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/chat/chat.py +0 -0
  196. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/communicate/__init__.py +0 -0
  197. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/communicate/communicate.py +0 -0
  198. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/flow.py +0 -0
  199. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/instruct/__init__.py +0 -0
  200. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/instruct/instruct.py +0 -0
  201. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/interpret/__init__.py +0 -0
  202. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/interpret/interpret.py +0 -0
  203. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/operate/__init__.py +0 -0
  204. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/operate/operate.py +0 -0
  205. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/parse/__init__.py +0 -0
  206. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/parse/parse.py +0 -0
  207. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/plan/__init__.py +0 -0
  208. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/plan/plan.py +0 -0
  209. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/plan/prompt.py +0 -0
  210. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/select/__init__.py +0 -0
  211. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/select/select.py +0 -0
  212. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/select/utils.py +0 -0
  213. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/translate/__init__.py +0 -0
  214. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/translate/translate.py +0 -0
  215. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/types.py +0 -0
  216. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/operations/utils.py +0 -0
  217. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/__init__.py +0 -0
  218. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/_concepts.py +0 -0
  219. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/action/__init__.py +0 -0
  220. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/action/function_calling.py +0 -0
  221. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/action/manager.py +0 -0
  222. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/action/tool.py +0 -0
  223. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/forms/__init__.py +0 -0
  224. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/forms/base.py +0 -0
  225. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/forms/flow.py +0 -0
  226. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/forms/form.py +0 -0
  227. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/forms/report.py +0 -0
  228. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/generic/__init__.py +0 -0
  229. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/generic/element.py +0 -0
  230. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/generic/log.py +0 -0
  231. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/generic/pile.py +0 -0
  232. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/generic/processor.py +0 -0
  233. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/generic/progression.py +0 -0
  234. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/graph/__init__.py +0 -0
  235. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/graph/edge.py +0 -0
  236. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/graph/graph.py +0 -0
  237. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/graph/node.py +0 -0
  238. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/mail/__init__.py +0 -0
  239. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/mail/exchange.py +0 -0
  240. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/mail/mail.py +0 -0
  241. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/mail/mailbox.py +0 -0
  242. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/mail/manager.py +0 -0
  243. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/mail/package.py +0 -0
  244. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/messages/__init__.py +0 -0
  245. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/messages/action_request.py +0 -0
  246. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/messages/action_response.py +0 -0
  247. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/messages/assistant_response.py +0 -0
  248. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/messages/base.py +0 -0
  249. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/messages/instruction.py +0 -0
  250. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/messages/manager.py +0 -0
  251. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/messages/message.py +0 -0
  252. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/messages/system.py +0 -0
  253. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/messages/templates/README.md +0 -0
  254. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
  255. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
  256. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
  257. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
  258. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
  259. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
  260. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/operatives/__init__.py +0 -0
  261. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/operatives/operative.py +0 -0
  262. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/operatives/step.py +0 -0
  263. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/protocols/types.py +0 -0
  264. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/py.typed +0 -0
  265. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/__init__.py +0 -0
  266. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/connections/__init__.py +0 -0
  267. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/connections/api_calling.py +0 -0
  268. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/connections/endpoint.py +0 -0
  269. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/connections/endpoint_config.py +0 -0
  270. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/connections/header_factory.py +0 -0
  271. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/connections/match_endpoint.py +0 -0
  272. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/connections/providers/__init__.py +0 -0
  273. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/connections/providers/anthropic_.py +0 -0
  274. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/connections/providers/claude_code_.py +0 -0
  275. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/connections/providers/claude_code_cli.py +0 -0
  276. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/connections/providers/exa_.py +0 -0
  277. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/connections/providers/oai_.py +0 -0
  278. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/connections/providers/ollama_.py +0 -0
  279. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/connections/providers/perplexity_.py +0 -0
  280. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/connections/providers/types.py +0 -0
  281. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/hooks/__init__.py +0 -0
  282. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/hooks/_types.py +0 -0
  283. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/hooks/_utils.py +0 -0
  284. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/hooks/hook_event.py +0 -0
  285. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/hooks/hook_registry.py +0 -0
  286. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/imodel.py +0 -0
  287. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/manager.py +0 -0
  288. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/rate_limited_processor.py +0 -0
  289. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/resilience.py +0 -0
  290. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/third_party/README.md +0 -0
  291. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/third_party/__init__.py +0 -0
  292. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/third_party/anthropic_models.py +0 -0
  293. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/third_party/claude_code.py +0 -0
  294. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/third_party/exa_models.py +0 -0
  295. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/third_party/openai_model_names.py +0 -0
  296. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/third_party/pplx_models.py +0 -0
  297. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/token_calculator.py +0 -0
  298. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/service/types.py +0 -0
  299. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/session/__init__.py +0 -0
  300. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/session/prompts.py +0 -0
  301. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/settings.py +0 -0
  302. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/tools/__init__.py +0 -0
  303. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/tools/base.py +0 -0
  304. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/tools/file/__init__.py +0 -0
  305. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/tools/file/reader.py +0 -0
  306. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/tools/memory/tools.py +0 -0
  307. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/tools/types.py +0 -0
  308. {lionagi-0.15.0 → lionagi-0.15.2}/lionagi/utils.py +0 -0
  309. {lionagi-0.15.0 → lionagi-0.15.2}/main.py +0 -0
  310. {lionagi-0.15.0 → lionagi-0.15.2}/scripts/README.md +0 -0
  311. {lionagi-0.15.0 → lionagi-0.15.2}/scripts/concat.py +0 -0
  312. {lionagi-0.15.0 → lionagi-0.15.2}/scripts/config.py +0 -0
  313. {lionagi-0.15.0 → lionagi-0.15.2}/scripts/update_openai_models.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lionagi
3
- Version: 0.15.0
3
+ Version: 0.15.2
4
4
  Summary: An Intelligence Operating System.
5
5
  Author-email: HaiyangLi <quantocean.li@gmail.com>
6
6
  License: Apache License
@@ -497,7 +497,7 @@ We welcome issues, ideas, and pull requests:
497
497
 
498
498
  ```
499
499
  @software{Li_LionAGI_2023,
500
- author = {Haiyang Li, Liangbingyan Luo},
500
+ author = {Haiyang Li},
501
501
  month = {12},
502
502
  year = {2023},
503
503
  title = {LionAGI: Towards Automated General Intelligence},
@@ -225,7 +225,7 @@ We welcome issues, ideas, and pull requests:
225
225
 
226
226
  ```
227
227
  @software{Li_LionAGI_2023,
228
- author = {Haiyang Li, Liangbingyan Luo},
228
+ author = {Haiyang Li},
229
229
  month = {12},
230
230
  year = {2023},
231
231
  title = {LionAGI: Towards Automated General Intelligence},
@@ -1,6 +1,7 @@
1
1
  import asyncio
2
+ from collections.abc import AsyncGenerator, Callable
2
3
  from dataclasses import dataclass
3
- from typing import Any, AsyncGenerator, Callable, ClassVar
4
+ from typing import Any, ClassVar
4
5
 
5
6
  import anyio
6
7
  from pydantic import BaseModel
@@ -1,5 +1,6 @@
1
+ from collections.abc import Callable, Iterable
1
2
  from dataclasses import dataclass
2
- from typing import Any, Callable, ClassVar, Iterable, TypeVar
3
+ from typing import Any, ClassVar, TypeVar
3
4
 
4
5
  from ._models import Params
5
6
  from ._to_list import to_list
@@ -1,6 +1,7 @@
1
+ from collections.abc import Iterable, Mapping
1
2
  from dataclasses import dataclass
2
3
  from enum import Enum as _Enum
3
- from typing import Any, ClassVar, Iterable, Mapping
4
+ from typing import Any, ClassVar
4
5
 
5
6
  from pydantic import BaseModel
6
7
  from pydantic_core import PydanticUndefinedType
@@ -31,7 +31,7 @@ class _SingletonMeta(type):
31
31
  allowing safe identity checks with 'is' operator.
32
32
  """
33
33
 
34
- _cache: dict[type, "SingletonType"] = {}
34
+ _cache: dict[type, SingletonType] = {}
35
35
 
36
36
  def __call__(cls, *a, **kw):
37
37
  if cls not in cls._cache:
@@ -1,6 +1,7 @@
1
1
  import asyncio
2
+ from collections.abc import Callable
2
3
  from functools import lru_cache
3
- from typing import Any, Callable
4
+ from typing import Any
4
5
 
5
6
  __all__ = ("is_coro_func",)
6
7
 
@@ -0,0 +1,23 @@
1
+ from collections.abc import Callable
2
+
3
+ from lionagi.protocols._concepts import Manager
4
+ from lionagi.utils import is_coro_func
5
+
6
+ """
7
+ experimental
8
+ """
9
+
10
+
11
+ class OperationManager(Manager):
12
+ def __init__(self):
13
+ super().__init__()
14
+ self.registry: dict[str, Callable] = {}
15
+
16
+ def register(self, operation: str, func: Callable, update: bool = False):
17
+ if operation in self.registry and not update:
18
+ raise ValueError(f"Operation '{operation}' is already registered.")
19
+ if not is_coro_func(func):
20
+ raise ValueError(
21
+ f"Operation '{operation}' must be an async function."
22
+ )
23
+ self.registry[operation] = func
@@ -26,7 +26,7 @@ logger = logging.getLogger("operation")
26
26
 
27
27
 
28
28
  class Operation(Node, Event):
29
- operation: BranchOperations
29
+ operation: BranchOperations | str
30
30
  parameters: dict[str, Any] | BaseModel = Field(
31
31
  default_factory=dict,
32
32
  description="Parameters for the operation",
@@ -74,12 +74,11 @@ class Operation(Node, Event):
74
74
  return self.execution.response if self.execution else None
75
75
 
76
76
  async def invoke(self, branch: Branch):
77
- meth = getattr(branch, self.operation, None)
77
+ meth = branch.get_operation(self.operation)
78
78
  if meth is None:
79
79
  raise ValueError(f"Unsupported operation type: {self.operation}")
80
80
 
81
81
  start = asyncio.get_event_loop().time()
82
-
83
82
  try:
84
83
  self.execution.status = EventStatus.PROCESSING
85
84
  self.branch_id = branch.id
@@ -2,11 +2,16 @@
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
 
5
+ import contextlib
6
+ import json
5
7
  from enum import Enum
6
8
  from typing import Any
7
9
 
8
10
  from pydantic import Field, field_serializer
9
11
 
12
+ from lionagi.ln import Unset
13
+ from lionagi.utils import to_dict
14
+
10
15
  from .element import Element
11
16
 
12
17
  __all__ = (
@@ -16,6 +21,9 @@ __all__ = (
16
21
  )
17
22
 
18
23
 
24
+ _SIMPLE_TYPE = (str, bytes, bytearray, int, float, type(None), Enum)
25
+
26
+
19
27
  class EventStatus(str, Enum):
20
28
  """Status states for tracking action execution progress.
21
29
 
@@ -79,6 +87,44 @@ class Execution:
79
87
  f"response={self.response}, error={self.error})"
80
88
  )
81
89
 
90
+ def to_dict(self) -> dict:
91
+ """Converts the execution state to a dictionary.
92
+
93
+ Returns:
94
+ dict: A dictionary representation of the execution state.
95
+ """
96
+ res_ = Unset
97
+ json_serializable = True
98
+
99
+ if not isinstance(self.response, _SIMPLE_TYPE):
100
+ json_serializable = False
101
+ try:
102
+ # check whether response is JSON serializable
103
+ json.dumps(self.response)
104
+ res_ = self.response
105
+ json_serializable = True
106
+ except Exception:
107
+ with contextlib.suppress(Exception):
108
+ # attempt to convert to dict
109
+ d_ = to_dict(
110
+ self.response,
111
+ recursive=True,
112
+ recursive_python_only=False,
113
+ )
114
+ json.dumps(d_)
115
+ res_ = d_
116
+ json_serializable = True
117
+
118
+ if res_ is Unset and not json_serializable:
119
+ res_ = "<unserializable>"
120
+
121
+ return {
122
+ "status": self.status.value,
123
+ "duration": self.duration,
124
+ "response": res_ or self.response,
125
+ "error": self.error,
126
+ }
127
+
82
128
 
83
129
  class Event(Element):
84
130
  """Extends Element with an execution state.
@@ -101,12 +147,7 @@ class Event(Element):
101
147
  dict: The serialized data containing status, duration, response,
102
148
  and error fields.
103
149
  """
104
- return {
105
- "status": val.status.value,
106
- "duration": val.duration,
107
- "response": val.response,
108
- "error": val.error,
109
- }
150
+ return val.to_dict()
110
151
 
111
152
  @property
112
153
  def response(self) -> Any:
@@ -2,7 +2,7 @@
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
 
5
- from collections.abc import AsyncGenerator
5
+ from collections.abc import AsyncGenerator, Callable
6
6
  from enum import Enum
7
7
  from typing import Any, Literal
8
8
 
@@ -14,6 +14,7 @@ from lionagi.config import settings
14
14
  from lionagi.fields import Instruct
15
15
  from lionagi.libs.schema.as_readable import as_readable
16
16
  from lionagi.models.field_model import FieldModel
17
+ from lionagi.operations.manager import OperationManager
17
18
  from lionagi.protocols.action.tool import FuncTool, Tool, ToolRef
18
19
  from lionagi.protocols.types import (
19
20
  ID,
@@ -49,7 +50,7 @@ from lionagi.settings import Settings
49
50
  from lionagi.tools.base import LionTool
50
51
  from lionagi.utils import UNDEFINED
51
52
  from lionagi.utils import alcall as alcall_legacy
52
- from lionagi.utils import copy
53
+ from lionagi.utils import copy, is_coro_func
53
54
 
54
55
  from .prompts import LION_SYSTEM_MESSAGE
55
56
 
@@ -111,6 +112,7 @@ class Branch(Element, Communicatable, Relational):
111
112
  _action_manager: ActionManager | None = PrivateAttr(None)
112
113
  _imodel_manager: iModelManager | None = PrivateAttr(None)
113
114
  _log_manager: LogManager | None = PrivateAttr(None)
115
+ _operation_manager: OperationManager | None = PrivateAttr(None)
114
116
 
115
117
  def __init__(
116
118
  self,
@@ -231,6 +233,8 @@ class Branch(Element, Communicatable, Relational):
231
233
  else:
232
234
  self._log_manager = LogManager(**Settings.Config.LOG, logs=logs)
233
235
 
236
+ self._operation_manager = OperationManager()
237
+
234
238
  # -------------------------------------------------------------------------
235
239
  # Properties to expose managers and core data
236
240
  # -------------------------------------------------------------------------
@@ -304,6 +308,11 @@ class Branch(Element, Communicatable, Relational):
304
308
  """
305
309
  return self._action_manager.registry
306
310
 
311
+ def get_operation(self, operation: str) -> Callable | None:
312
+ if hasattr(self, operation):
313
+ return getattr(self, operation)
314
+ return self._operation_manager.registry.get(operation)
315
+
307
316
  # -------------------------------------------------------------------------
308
317
  # Cloning
309
318
  # -------------------------------------------------------------------------
@@ -7,7 +7,7 @@ from collections.abc import Callable
7
7
  from typing import Any
8
8
 
9
9
  import pandas as pd
10
- from pydantic import Field, JsonValue, model_validator
10
+ from pydantic import Field, JsonValue, PrivateAttr, model_validator
11
11
  from typing_extensions import Self
12
12
 
13
13
  from lionagi.protocols.types import (
@@ -31,9 +31,9 @@ from lionagi.protocols.types import (
31
31
  )
32
32
 
33
33
  from .._errors import ItemNotFoundError
34
+ from ..ln import lcall
34
35
  from ..service.imodel import iModel
35
- from ..utils import lcall
36
- from .branch import Branch
36
+ from .branch import Branch, OperationManager
37
37
 
38
38
 
39
39
  class Session(Node, Communicatable, Relational):
@@ -56,6 +56,60 @@ class Session(Node, Communicatable, Relational):
56
56
  default_factory=MailManager, exclude=True
57
57
  )
58
58
  name: str = Field(default="Session")
59
+ user: SenderRecipient | None = None
60
+ _operation_manager: OperationManager = PrivateAttr(
61
+ default_factory=OperationManager
62
+ )
63
+
64
+ async def ainclude_branches(self, branches: ID[Branch].ItemSeq):
65
+ async with self.branches:
66
+ self.include_branches(branches)
67
+
68
+ def include_branches(self, branches: ID[Branch].ItemSeq):
69
+ def _take_in_branch(branch: Branch):
70
+ if not branch in self.branches:
71
+ self.branches.include(branch)
72
+ self.mail_manager.add_sources(branch)
73
+
74
+ branch.user = self.id
75
+ branch._operation_manager = self._operation_manager
76
+ if self.default_branch is None:
77
+ self.default_branch = branch
78
+
79
+ branches = [branches] if isinstance(branches, Branch) else branches
80
+
81
+ for i in branches:
82
+ _take_in_branch(i)
83
+
84
+ def register_operation(
85
+ self, operation: str, func: Callable, *, update: bool = False
86
+ ):
87
+ self._operation_manager.register(operation, func, update=update)
88
+
89
+ def operation(self, name: str = None, *, update: bool = False):
90
+ """
91
+ Decorator to automatically register functions as operations.
92
+
93
+ Args:
94
+ name: Operation name. If None, uses the function's __name__.
95
+ update: Whether to update if operation already exists.
96
+
97
+ Usage:
98
+ @session.operation()
99
+ async def read_issue():
100
+ ...
101
+
102
+ @session.operation("custom_name")
103
+ async def some_function():
104
+ ...
105
+ """
106
+
107
+ def decorator(func: Callable) -> Callable:
108
+ operation_name = name if name is not None else func.__name__
109
+ self.register_operation(operation_name, func, update=update)
110
+ return func
111
+
112
+ return decorator
59
113
 
60
114
  @model_validator(mode="after")
61
115
  def _add_mail_sources(self) -> Self:
@@ -64,7 +118,7 @@ class Session(Node, Communicatable, Relational):
64
118
  if self.default_branch not in self.branches:
65
119
  self.branches.include(self.default_branch)
66
120
  if self.branches:
67
- self.mail_manager.add_sources(self.branches)
121
+ self.include_branches(self.branches)
68
122
  return self
69
123
 
70
124
  def _lookup_branch_by_name(self, name: str) -> Branch | None:
@@ -102,7 +156,8 @@ class Session(Node, Communicatable, Relational):
102
156
  progress: Progression = None,
103
157
  tool_manager: ActionManager = None,
104
158
  tools: Tool | Callable | list = None,
105
- **kwargs, # additional branch parameters
159
+ as_default_branch: bool = False,
160
+ **kwargs,
106
161
  ) -> Branch:
107
162
  kwargs["system"] = system
108
163
  kwargs["system_sender"] = system_sender
@@ -116,13 +171,9 @@ class Session(Node, Communicatable, Relational):
116
171
  kwargs["tools"] = tools
117
172
  kwargs = {k: v for k, v in kwargs.items() if v is not None}
118
173
 
119
- from .branch import Branch
120
-
121
174
  branch = Branch(**kwargs) # type: ignore
122
-
123
- self.branches.include(branch)
124
- self.mail_manager.add_sources(branch)
125
- if self.default_branch is None:
175
+ self.include_branches(branch)
176
+ if as_default_branch:
126
177
  self.default_branch = branch
127
178
  return branch
128
179
 
@@ -179,7 +230,7 @@ class Session(Node, Communicatable, Relational):
179
230
  """
180
231
  branch: Branch = self.branches[branch]
181
232
  branch_clone = branch.clone(sender=self.id)
182
- self.branches.append(branch_clone)
233
+ self.include_branches(branch_clone)
183
234
  return branch_clone
184
235
 
185
236
  def change_default_branch(self, branch: ID.Ref):
@@ -230,10 +281,11 @@ class Session(Node, Communicatable, Relational):
230
281
  lambda x: [
231
282
  i for i in self.branches[x].messages if i not in exclude_flag
232
283
  ],
233
- sanitize_input=True,
234
- flatten=True,
235
- unique_input=True,
236
- unique_output=True,
284
+ input_unique=True,
285
+ input_flatten=True,
286
+ input_dropna=True,
287
+ output_flatten=True,
288
+ output_unique=True,
237
289
  )
238
290
  return Pile(
239
291
  collections=messages, item_type={RoledMessage}, strict_type=False
@@ -269,14 +321,15 @@ class Session(Node, Communicatable, Relational):
269
321
  lcall(
270
322
  to_,
271
323
  lambda x: self.mail_manager.send(ID.get_id(x)),
272
- sanitize_input=True,
273
- unique_input=True,
274
- use_input_values=True,
324
+ input_unique=True,
325
+ input_flatten=True,
326
+ input_dropna=True,
327
+ input_use_values=True,
275
328
  )
276
329
  except Exception as e:
277
330
  raise ValueError(f"Failed to send mail. Error: {e}")
278
331
 
279
- async def acollect_send_all(self, receive_all: bool = False):
332
+ async def acollect_send_all(self, receive_all: bool = True):
280
333
  """
281
334
  Collect and send mail for all branches, optionally receiving all mail.
282
335
 
@@ -286,7 +339,7 @@ class Session(Node, Communicatable, Relational):
286
339
  async with self.mail_manager.sources:
287
340
  self.collect_send_all(receive_all)
288
341
 
289
- def collect_send_all(self, receive_all: bool = False):
342
+ def collect_send_all(self, receive_all: bool = True):
290
343
  """
291
344
  Collect and send mail for all branches, optionally receiving all mail.
292
345
 
@@ -296,7 +349,8 @@ class Session(Node, Communicatable, Relational):
296
349
  self.collect()
297
350
  self.send()
298
351
  if receive_all:
299
- lcall(self.branches, lambda x: x.receive_all())
352
+ for i in self.branches:
353
+ i.receive_all()
300
354
 
301
355
  def collect(self, from_: ID.RefSeq = None):
302
356
  """
@@ -316,9 +370,10 @@ class Session(Node, Communicatable, Relational):
316
370
  lcall(
317
371
  from_,
318
372
  lambda x: self.mail_manager.collect(ID.get_id(x)),
319
- sanitize_input=True,
320
- unique_input=True,
321
- use_input_values=True,
373
+ input_flatten=True,
374
+ input_dropna=True,
375
+ input_unique=True,
376
+ input_use_values=True,
322
377
  )
323
378
  except Exception as e:
324
379
  raise ValueError(f"Failed to collect mail. Error: {e}")
@@ -0,0 +1 @@
1
+ __version__ = "0.15.2"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "lionagi"
3
- version = "0.15.0"
3
+ version = "0.15.2"
4
4
  description = "An Intelligence Operating System."
5
5
  authors = [
6
6
  { name = "HaiyangLi", email = "quantocean.li@gmail.com" },
@@ -1933,7 +1933,7 @@ wheels = [
1933
1933
 
1934
1934
  [[package]]
1935
1935
  name = "lionagi"
1936
- version = "0.15.0"
1936
+ version = "0.15.2"
1937
1937
  source = { editable = "." }
1938
1938
  dependencies = [
1939
1939
  { name = "aiocache" },
@@ -1,21 +0,0 @@
1
- from collections.abc import Callable
2
-
3
- from lionagi.protocols._concepts import Manager
4
-
5
- """
6
- experimental
7
- """
8
-
9
-
10
- class OperationManager(Manager):
11
- def __init__(self, *args, **kwargs):
12
- super().__init__()
13
- self.registry: dict[str, Callable] = {}
14
- self.register_operations(*args, **kwargs)
15
-
16
- def register_operations(self, *args, **kwargs) -> None:
17
- operations = {}
18
- if args:
19
- operations = {i.__name__ for i in args if hasattr(i, "__name__")}
20
- operations.update(kwargs)
21
- self.registry.update(operations)
@@ -1 +0,0 @@
1
- __version__ = "0.15.0"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes