lionagi 0.14.8__tar.gz → 0.14.9__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 (311) hide show
  1. {lionagi-0.14.8 → lionagi-0.14.9}/PKG-INFO +2 -2
  2. {lionagi-0.14.8 → lionagi-0.14.9}/README.md +1 -1
  3. {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/007_fan_out_in.py +35 -7
  4. {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/claude_proxy/claude_code_proxy.py +2 -5
  5. lionagi-0.14.9/cookbooks/claude_proxy/run_w_claude_code_proxy.ipynb +100 -0
  6. lionagi-0.14.9/lionagi/_errors.py +148 -0
  7. lionagi-0.14.9/lionagi/_types.py +3 -0
  8. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/config.py +3 -1
  9. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/models/operable_model.py +8 -3
  10. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/flow.py +0 -1
  11. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/generic/event.py +2 -0
  12. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/generic/log.py +26 -10
  13. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/operatives/step.py +1 -1
  14. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/types.py +9 -1
  15. lionagi-0.14.8/lionagi/service/types.py → lionagi-0.14.9/lionagi/service/__init__.py +6 -4
  16. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/api_calling.py +57 -2
  17. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/endpoint_config.py +1 -1
  18. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/header_factory.py +4 -2
  19. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/match_endpoint.py +10 -10
  20. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/providers/anthropic_.py +5 -2
  21. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/providers/claude_code_.py +13 -17
  22. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/providers/claude_code_cli.py +51 -16
  23. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/providers/exa_.py +5 -3
  24. lionagi-0.14.9/lionagi/service/connections/providers/oai_.py +200 -0
  25. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/providers/ollama_.py +38 -18
  26. lionagi-0.14.9/lionagi/service/connections/providers/perplexity_.py +51 -0
  27. lionagi-0.14.9/lionagi/service/connections/providers/types.py +30 -0
  28. lionagi-0.14.9/lionagi/service/hooks/__init__.py +25 -0
  29. lionagi-0.14.9/lionagi/service/hooks/_types.py +52 -0
  30. lionagi-0.14.9/lionagi/service/hooks/_utils.py +85 -0
  31. lionagi-0.14.9/lionagi/service/hooks/hook_event.py +67 -0
  32. lionagi-0.14.9/lionagi/service/hooks/hook_registry.py +221 -0
  33. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/imodel.py +120 -34
  34. lionagi-0.14.9/lionagi/service/third_party/claude_code.py +715 -0
  35. lionagi-0.14.9/lionagi/service/third_party/openai_model_names.py +198 -0
  36. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/third_party/pplx_models.py +16 -8
  37. lionagi-0.14.9/lionagi/service/types.py +41 -0
  38. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/session/branch.py +1 -4
  39. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/tools/base.py +1 -3
  40. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/utils.py +8 -2
  41. lionagi-0.14.9/lionagi/version.py +1 -0
  42. {lionagi-0.14.8 → lionagi-0.14.9}/pyproject.toml +1 -1
  43. lionagi-0.14.9/scripts/README.md +41 -0
  44. lionagi-0.14.9/scripts/update_openai_models.py +281 -0
  45. {lionagi-0.14.8 → lionagi-0.14.9}/uv.lock +1 -1
  46. lionagi-0.14.8/cookbooks/claude_proxy/run_w_claude_code_proxy.ipynb +0 -217
  47. lionagi-0.14.8/lionagi/_errors.py +0 -39
  48. lionagi-0.14.8/lionagi/_types.py +0 -9
  49. lionagi-0.14.8/lionagi/service/__init__.py +0 -1
  50. lionagi-0.14.8/lionagi/service/connections/providers/_claude_code/__init__.py +0 -3
  51. lionagi-0.14.8/lionagi/service/connections/providers/_claude_code/models.py +0 -244
  52. lionagi-0.14.8/lionagi/service/connections/providers/_claude_code/stream_cli.py +0 -359
  53. lionagi-0.14.8/lionagi/service/connections/providers/oai_.py +0 -165
  54. lionagi-0.14.8/lionagi/service/connections/providers/perplexity_.py +0 -29
  55. lionagi-0.14.8/lionagi/service/third_party/openai_models.py +0 -18241
  56. lionagi-0.14.8/lionagi/version.py +0 -1
  57. lionagi-0.14.8/scripts/README.md +0 -15
  58. {lionagi-0.14.8 → lionagi-0.14.9}/.coveragerc +0 -0
  59. {lionagi-0.14.8 → lionagi-0.14.9}/.env.example +0 -0
  60. {lionagi-0.14.8 → lionagi-0.14.9}/.github/FUNDING.yml +0 -0
  61. {lionagi-0.14.8 → lionagi-0.14.9}/.github/dependabot.yml +0 -0
  62. {lionagi-0.14.8 → lionagi-0.14.9}/.github/workflows/ci.yml +0 -0
  63. {lionagi-0.14.8 → lionagi-0.14.9}/.github/workflows/codeql.yml +0 -0
  64. {lionagi-0.14.8 → lionagi-0.14.9}/.github/workflows/docs.yml +0 -0
  65. {lionagi-0.14.8 → lionagi-0.14.9}/.github/workflows/release.yml +0 -0
  66. {lionagi-0.14.8 → lionagi-0.14.9}/.gitignore +0 -0
  67. {lionagi-0.14.8 → lionagi-0.14.9}/.pre-commit-config.yaml +0 -0
  68. {lionagi-0.14.8 → lionagi-0.14.9}/.python-version +0 -0
  69. {lionagi-0.14.8 → lionagi-0.14.9}/CODE_OF_CONDUCT.md +0 -0
  70. {lionagi-0.14.8 → lionagi-0.14.9}/CONTRIBUTING.md +0 -0
  71. {lionagi-0.14.8 → lionagi-0.14.9}/LICENSE +0 -0
  72. {lionagi-0.14.8 → lionagi-0.14.9}/assets/operation_builder.gif +0 -0
  73. {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/001_branch_converse.ipynb +0 -0
  74. {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/002_branch_interact.ipynb +0 -0
  75. {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/003_branch_info.ipynb +0 -0
  76. {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/004_conversation_patterns.ipynb +0 -0
  77. {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/005_react_basics.ipynb +0 -0
  78. {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/006_operation_graphs_claim_extraction.ipynb +0 -0
  79. {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/claude_proxy/README.md +0 -0
  80. {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/data/002_comedian.json +0 -0
  81. {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/data/002_critic.json +0 -0
  82. {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/data/006_lion_proof_ch2.md +0 -0
  83. {lionagi-0.14.8 → lionagi-0.14.9}/cookbooks/using_claude_code.py +0 -0
  84. {lionagi-0.14.8 → lionagi-0.14.9}/docs/Makefile +0 -0
  85. {lionagi-0.14.8 → lionagi-0.14.9}/docs/_static/custom.css +0 -0
  86. {lionagi-0.14.8 → lionagi-0.14.9}/docs/_templates/layout.html +0 -0
  87. {lionagi-0.14.8 → lionagi-0.14.9}/docs/conf.py +0 -0
  88. {lionagi-0.14.8 → lionagi-0.14.9}/docs/discussions/anyio-migration.md +0 -0
  89. {lionagi-0.14.8 → lionagi-0.14.9}/docs/index.rst +0 -0
  90. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/action.rst +0 -0
  91. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/adapter.rst +0 -0
  92. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/branch.rst +0 -0
  93. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/branch_operations.rst +0 -0
  94. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/concepts.rst +0 -0
  95. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/element_id.rst +0 -0
  96. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/event.rst +0 -0
  97. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/form.rst +0 -0
  98. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/graph.rst +0 -0
  99. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/index.rst +0 -0
  100. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/instruct.rst +0 -0
  101. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/lib_file.rst +0 -0
  102. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/lib_nested.rst +0 -0
  103. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/lib_package.rst +0 -0
  104. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/lib_schema.rst +0 -0
  105. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/lib_validate.rst +0 -0
  106. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/log.rst +0 -0
  107. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/mail.rst +0 -0
  108. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/message.rst +0 -0
  109. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/models.rst +0 -0
  110. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/operative_step.rst +0 -0
  111. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/pile.rst +0 -0
  112. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/processor.rst +0 -0
  113. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/progression.rst +0 -0
  114. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/service.rst +0 -0
  115. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/session.rst +0 -0
  116. {lionagi-0.14.8 → lionagi-0.14.9}/docs/modules/utils.rst +0 -0
  117. {lionagi-0.14.8 → lionagi-0.14.9}/docs/tutorials/get_started.rst +0 -0
  118. {lionagi-0.14.8 → lionagi-0.14.9}/docs/tutorials/get_started_pt2.rst +0 -0
  119. {lionagi-0.14.8 → lionagi-0.14.9}/docs/tutorials/get_started_pt3.rst +0 -0
  120. {lionagi-0.14.8 → lionagi-0.14.9}/docs/tutorials/index.rst +0 -0
  121. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/__init__.py +0 -0
  122. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/_class_registry.py +0 -0
  123. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/adapters/__init__.py +0 -0
  124. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/adapters/async_postgres_adapter.py +0 -0
  125. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/adapters/postgres_model_adapter.py +0 -0
  126. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/fields/__init__.py +0 -0
  127. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/fields/action.py +0 -0
  128. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/fields/base.py +0 -0
  129. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/fields/code.py +0 -0
  130. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/fields/file.py +0 -0
  131. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/fields/instruct.py +0 -0
  132. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/fields/reason.py +0 -0
  133. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/fields/research.py +0 -0
  134. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/__init__.py +0 -0
  135. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/concurrency/__init__.py +0 -0
  136. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/concurrency/cancel.py +0 -0
  137. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/concurrency/errors.py +0 -0
  138. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/concurrency/patterns.py +0 -0
  139. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/concurrency/primitives.py +0 -0
  140. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/concurrency/resource_tracker.py +0 -0
  141. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/concurrency/task.py +0 -0
  142. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/file/__init__.py +0 -0
  143. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/file/chunk.py +0 -0
  144. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/file/concat.py +0 -0
  145. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/file/concat_files.py +0 -0
  146. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/file/file_ops.py +0 -0
  147. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/file/params.py +0 -0
  148. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/file/process.py +0 -0
  149. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/file/save.py +0 -0
  150. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/hash/__init__.py +0 -0
  151. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/hash/hash_dict.py +0 -0
  152. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/hash/manager.py +0 -0
  153. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/__init__.py +0 -0
  154. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/flatten.py +0 -0
  155. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/nfilter.py +0 -0
  156. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/nget.py +0 -0
  157. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/ninsert.py +0 -0
  158. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/nmerge.py +0 -0
  159. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/npop.py +0 -0
  160. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/nset.py +0 -0
  161. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/unflatten.py +0 -0
  162. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/nested/utils.py +0 -0
  163. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/package/__init__.py +0 -0
  164. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/package/imports.py +0 -0
  165. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/package/management.py +0 -0
  166. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/package/params.py +0 -0
  167. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/package/system.py +0 -0
  168. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/parse.py +0 -0
  169. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/schema/__init__.py +0 -0
  170. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/schema/as_readable.py +0 -0
  171. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/schema/extract_code_block.py +0 -0
  172. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/schema/extract_docstring.py +0 -0
  173. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/schema/function_to_schema.py +0 -0
  174. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/schema/json_schema.py +0 -0
  175. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/schema/load_pydantic_model_from_schema.py +0 -0
  176. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/__init__.py +0 -0
  177. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/base.py +0 -0
  178. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/llmlingua.py +0 -0
  179. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/perplexity.py +0 -0
  180. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/symbolic_compress_context.py +0 -0
  181. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang.py +0 -0
  182. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/base.py +0 -0
  183. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/abstract_algebra.toml +0 -0
  184. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/category_theory.toml +0 -0
  185. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/complex_analysis.toml +0 -0
  186. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/framework_options.json +0 -0
  187. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/group_theory.toml +0 -0
  188. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/math_logic.toml +0 -0
  189. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/reflective_patterns.toml +0 -0
  190. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/set_theory.toml +0 -0
  191. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/frameworks/topology_fundamentals.toml +0 -0
  192. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/mapping/lion_emoji_mapping.toml +0 -0
  193. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/mapping/python_math_mapping.toml +0 -0
  194. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/mapping/rust_chinese_mapping.toml +0 -0
  195. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/resources/utility/base_synthlang_system_prompt.toml +0 -0
  196. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/synthlang_/translate_to_synthlang.py +0 -0
  197. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/token_transform/types.py +0 -0
  198. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/validate/__init__.py +0 -0
  199. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/validate/common_field_validators.py +0 -0
  200. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/validate/fuzzy_match_keys.py +0 -0
  201. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/validate/fuzzy_validate_mapping.py +0 -0
  202. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/validate/string_similarity.py +0 -0
  203. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/libs/validate/validate_boolean.py +0 -0
  204. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/models/__init__.py +0 -0
  205. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/models/field_model.py +0 -0
  206. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/models/hashable_model.py +0 -0
  207. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/models/model_params.py +0 -0
  208. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/models/note.py +0 -0
  209. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/models/schema_model.py +0 -0
  210. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/ReAct/ReAct.py +0 -0
  211. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/ReAct/__init__.py +0 -0
  212. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/ReAct/utils.py +0 -0
  213. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/__init__.py +0 -0
  214. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/_act/__init__.py +0 -0
  215. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/_act/act.py +0 -0
  216. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/brainstorm/__init__.py +0 -0
  217. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/brainstorm/brainstorm.py +0 -0
  218. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/brainstorm/prompt.py +0 -0
  219. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/builder.py +0 -0
  220. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/chat/__init__.py +0 -0
  221. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/chat/chat.py +0 -0
  222. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/communicate/__init__.py +0 -0
  223. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/communicate/communicate.py +0 -0
  224. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/instruct/__init__.py +0 -0
  225. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/instruct/instruct.py +0 -0
  226. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/interpret/__init__.py +0 -0
  227. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/interpret/interpret.py +0 -0
  228. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/manager.py +0 -0
  229. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/node.py +0 -0
  230. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/operate/__init__.py +0 -0
  231. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/operate/operate.py +0 -0
  232. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/parse/__init__.py +0 -0
  233. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/parse/parse.py +0 -0
  234. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/plan/__init__.py +0 -0
  235. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/plan/plan.py +0 -0
  236. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/plan/prompt.py +0 -0
  237. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/select/__init__.py +0 -0
  238. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/select/select.py +0 -0
  239. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/select/utils.py +0 -0
  240. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/translate/__init__.py +0 -0
  241. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/translate/translate.py +0 -0
  242. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/types.py +0 -0
  243. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/operations/utils.py +0 -0
  244. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/__init__.py +0 -0
  245. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/_concepts.py +0 -0
  246. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/action/__init__.py +0 -0
  247. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/action/function_calling.py +0 -0
  248. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/action/manager.py +0 -0
  249. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/action/tool.py +0 -0
  250. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/forms/__init__.py +0 -0
  251. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/forms/base.py +0 -0
  252. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/forms/flow.py +0 -0
  253. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/forms/form.py +0 -0
  254. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/forms/report.py +0 -0
  255. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/generic/__init__.py +0 -0
  256. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/generic/element.py +0 -0
  257. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/generic/pile.py +0 -0
  258. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/generic/processor.py +0 -0
  259. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/generic/progression.py +0 -0
  260. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/graph/__init__.py +0 -0
  261. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/graph/edge.py +0 -0
  262. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/graph/graph.py +0 -0
  263. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/graph/node.py +0 -0
  264. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/mail/__init__.py +0 -0
  265. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/mail/exchange.py +0 -0
  266. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/mail/mail.py +0 -0
  267. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/mail/mailbox.py +0 -0
  268. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/mail/manager.py +0 -0
  269. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/mail/package.py +0 -0
  270. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/__init__.py +0 -0
  271. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/action_request.py +0 -0
  272. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/action_response.py +0 -0
  273. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/assistant_response.py +0 -0
  274. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/base.py +0 -0
  275. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/instruction.py +0 -0
  276. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/manager.py +0 -0
  277. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/message.py +0 -0
  278. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/system.py +0 -0
  279. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/templates/README.md +0 -0
  280. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
  281. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
  282. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
  283. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
  284. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
  285. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
  286. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/operatives/__init__.py +0 -0
  287. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/protocols/operatives/operative.py +0 -0
  288. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/py.typed +0 -0
  289. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/__init__.py +0 -0
  290. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/endpoint.py +0 -0
  291. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/connections/providers/__init__.py +0 -0
  292. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/manager.py +0 -0
  293. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/rate_limited_processor.py +0 -0
  294. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/resilience.py +0 -0
  295. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/third_party/README.md +0 -0
  296. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/third_party/__init__.py +0 -0
  297. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/third_party/anthropic_models.py +0 -0
  298. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/third_party/exa_models.py +0 -0
  299. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/service/token_calculator.py +0 -0
  300. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/session/__init__.py +0 -0
  301. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/session/prompts.py +0 -0
  302. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/session/session.py +0 -0
  303. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/settings.py +0 -0
  304. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/tools/__init__.py +0 -0
  305. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/tools/file/__init__.py +0 -0
  306. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/tools/file/reader.py +0 -0
  307. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/tools/memory/tools.py +0 -0
  308. {lionagi-0.14.8 → lionagi-0.14.9}/lionagi/tools/types.py +0 -0
  309. {lionagi-0.14.8 → lionagi-0.14.9}/main.py +0 -0
  310. {lionagi-0.14.8 → lionagi-0.14.9}/scripts/concat.py +0 -0
  311. {lionagi-0.14.8 → lionagi-0.14.9}/scripts/config.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lionagi
3
- Version: 0.14.8
3
+ Version: 0.14.9
4
4
  Summary: An Intelligence Operating System.
5
5
  Author-email: HaiyangLi <quantocean.li@gmail.com>, Liangbingyan Luo <llby_luo@outlook.com>
6
6
  License: Apache License
@@ -272,7 +272,7 @@ Description-Content-Type: text/markdown
272
272
 
273
273
  [Documentation](https://lion-agi.github.io/lionagi/) |
274
274
  [Discord](https://discord.gg/JDj9ENhUE8) |
275
- [PyPI](https://pypi.org/project/lionagi/) |
275
+ [PyPI](https://pypi.org/project/lionagi/)
276
276
 
277
277
  # LION - Language InterOperable Network
278
278
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  [Documentation](https://lion-agi.github.io/lionagi/) |
6
6
  [Discord](https://discord.gg/JDj9ENhUE8) |
7
- [PyPI](https://pypi.org/project/lionagi/) |
7
+ [PyPI](https://pypi.org/project/lionagi/)
8
8
 
9
9
  # LION - Language InterOperable Network
10
10
 
@@ -1,5 +1,6 @@
1
- from lionagi import Branch, Builder, Session, iModel
1
+ from lionagi import Branch, Builder, Operation, Session, iModel
2
2
  from lionagi.fields import LIST_INSTRUCT_FIELD_MODEL, Instruct
3
+ from lionagi.protocols.types import AssistantResponse
3
4
 
4
5
  CC_WORKSPACE = ".khive/workspace"
5
6
 
@@ -15,7 +16,6 @@ def create_cc(
15
16
  provider="claude_code",
16
17
  endpoint="query_cli",
17
18
  model=model,
18
- api_key="dummy_api_key",
19
19
  ws=f"{CC_WORKSPACE}/{subdir}",
20
20
  verbose_output=verbose_output,
21
21
  add_dir="../../../",
@@ -26,7 +26,7 @@ def create_cc(
26
26
 
27
27
 
28
28
  prompt = """
29
- Task: Investigate the codebase in the specified directory and provide a comprehensive overview.
29
+ Task: Quickly Investigate the codebase in the specified directory and provide a comprehensive overview.
30
30
 
31
31
  ---START
32
32
  read into the specified dir, glance over the key components and pay attention to architecture,
@@ -86,16 +86,44 @@ async def main():
86
86
  )
87
87
  research_nodes.append(node)
88
88
 
89
- synthesis = builder.add_aggregation(
89
+ costs = 0
90
+
91
+ def get_context(node_id):
92
+ nonlocal costs
93
+ g = builder.get_graph()
94
+ node: Operation = g.internal_nodes[node_id]
95
+ branch = session.get_branch(node.branch_id, None)
96
+ if (
97
+ branch
98
+ and len(branch.messages) > 0
99
+ and isinstance(msg := branch.messages[-1], AssistantResponse)
100
+ ):
101
+ costs += msg.model_response.get("total_cost_usd") or 0
102
+ return f"""
103
+ Response: {msg.model_response.get("result") or "Not available"}
104
+ Summary: {msg.model_response.get("summary") or "Not available"}
105
+ """.strip()
106
+
107
+ await session.flow(builder.get_graph())
108
+ ctx = [get_context(i) for i in research_nodes]
109
+
110
+ synthesis = builder.add_operation(
90
111
  "communicate",
91
- source_node_ids=research_nodes,
112
+ depends_on=research_nodes,
92
113
  branch=orc_branch,
93
114
  instruction="Synthesize the information from the researcher branches.",
115
+ context=[i for i in ctx if i is not None],
116
+ )
117
+
118
+ result3 = await session.flow(builder.get_graph())
119
+ result_synthesis = result3["operation_results"][synthesis]
120
+
121
+ builder.visualize(
122
+ "LionAGI codebase investigation: fan-out fan-in pattern with Claude Code"
94
123
  )
95
124
 
96
- result2 = await session.flow(builder.get_graph())
97
- result_synthesis = result2["operation_results"][synthesis]
98
125
  print(result_synthesis)
126
+ print(f"Flow total cost: ${costs:.4f}")
99
127
 
100
128
  except Exception as e:
101
129
  print(f"Error: {e}")
@@ -47,12 +47,10 @@ app = FastAPI(
47
47
  def check_claude_code():
48
48
  """Verify Claude Code CLI is installed and accessible"""
49
49
  try:
50
- from lionagi.service.connections.providers._claude_code.stream_cli import (
51
- CLAUDE,
52
- )
50
+ from lionagi.service.third_party.claude_code import CLAUDE_CLI
53
51
 
54
52
  result = subprocess.run(
55
- [CLAUDE, "--version"], capture_output=True, text=True
53
+ [CLAUDE_CLI, "--version"], capture_output=True, text=True
56
54
  )
57
55
  if result.returncode != 0:
58
56
  raise RuntimeError(
@@ -75,7 +73,6 @@ async def health_check():
75
73
 
76
74
  @app.post("/v1/query")
77
75
  async def query(request: ClaudeCodeRequest):
78
-
79
76
  endpoint = ClaudeCodeCLIEndpoint()
80
77
  try:
81
78
  return await endpoint._call(payload={"request": request}, headers={})
@@ -0,0 +1,100 @@
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "id": "d2ceb407",
7
+ "metadata": {},
8
+ "outputs": [],
9
+ "source": [
10
+ "from lionagi.service.connections.endpoint_config import EndpointConfig\n",
11
+ "from lionagi.service.imodel import Endpoint\n",
12
+ "from lionagi.service.connections.providers.claude_code_cli import (\n",
13
+ " ClaudeCodeRequest,\n",
14
+ ")\n",
15
+ "\n",
16
+ "claude_code_config = EndpointConfig(\n",
17
+ " name=\"claude_code_cli_proxy\",\n",
18
+ " provider=\"claude_code\",\n",
19
+ " base_url=\"http://localhost:8000/v1\",\n",
20
+ " endpoint=\"query\",\n",
21
+ " api_key=\"dummy_api_key\",\n",
22
+ " kwargs={\"model\": \"sonnet\"},\n",
23
+ ")\n",
24
+ "claude_code = Endpoint(claude_code_config)"
25
+ ]
26
+ },
27
+ {
28
+ "cell_type": "code",
29
+ "execution_count": null,
30
+ "id": "5fc216f4",
31
+ "metadata": {},
32
+ "outputs": [],
33
+ "source": [
34
+ "# prompt = \"reply in text only, Write a Python function to calculate the factorial of a number.\"\n",
35
+ "\n",
36
+ "# await claude_code.call(request=ClaudeCodeRequest(prompt=prompt))"
37
+ ]
38
+ },
39
+ {
40
+ "cell_type": "code",
41
+ "execution_count": null,
42
+ "id": "4c173814",
43
+ "metadata": {},
44
+ "outputs": [],
45
+ "source": [
46
+ "from lionagi import iModel\n",
47
+ "\n",
48
+ "claude_code = iModel(endpoint=claude_code)"
49
+ ]
50
+ },
51
+ {
52
+ "cell_type": "code",
53
+ "execution_count": null,
54
+ "id": "fe6dcca4",
55
+ "metadata": {},
56
+ "outputs": [],
57
+ "source": [
58
+ "result = await claude_code.invoke(\n",
59
+ " messages=[\n",
60
+ " {\n",
61
+ " \"role\": \"user\",\n",
62
+ " \"content\": \"reply in text only, Write a Python function to calculate the factorial of a number.\",\n",
63
+ " }\n",
64
+ " ]\n",
65
+ ")"
66
+ ]
67
+ },
68
+ {
69
+ "cell_type": "code",
70
+ "execution_count": null,
71
+ "id": "88db9e9a",
72
+ "metadata": {},
73
+ "outputs": [],
74
+ "source": [
75
+ "result.response"
76
+ ]
77
+ }
78
+ ],
79
+ "metadata": {
80
+ "kernelspec": {
81
+ "display_name": "lionagi",
82
+ "language": "python",
83
+ "name": "python3"
84
+ },
85
+ "language_info": {
86
+ "codemirror_mode": {
87
+ "name": "ipython",
88
+ "version": 3
89
+ },
90
+ "file_extension": ".py",
91
+ "mimetype": "text/x-python",
92
+ "name": "python",
93
+ "nbconvert_exporter": "python",
94
+ "pygments_lexer": "ipython3",
95
+ "version": "3.10.15"
96
+ }
97
+ },
98
+ "nbformat": 4,
99
+ "nbformat_minor": 5
100
+ }
@@ -0,0 +1,148 @@
1
+ # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Any, ClassVar
8
+
9
+ __all__ = (
10
+ "LionError",
11
+ "ValidationError",
12
+ "NotFoundError",
13
+ "ExistsError",
14
+ "ObservationError",
15
+ "ResourceError",
16
+ "RateLimitError",
17
+ "IDError",
18
+ "RelationError",
19
+ "OperationError",
20
+ "ExecutionError",
21
+ "ItemNotFoundError",
22
+ "ItemExistsError",
23
+ )
24
+
25
+
26
+ class LionError(Exception):
27
+ default_message: ClassVar[str] = "LionAGI error"
28
+ default_status_code: ClassVar[int] = 500
29
+ __slots__ = ("message", "details", "status_code")
30
+
31
+ def __init__(
32
+ self,
33
+ message: str | None = None,
34
+ *,
35
+ details: dict[str, Any] | None = None,
36
+ status_code: int | None = None,
37
+ cause: Exception | None = None,
38
+ ):
39
+ super().__init__(message or self.default_message)
40
+ if cause:
41
+ self.__cause__ = cause # preserves traceback
42
+ self.message = message or self.default_message
43
+ self.details = details or {}
44
+ self.status_code = status_code or type(self).default_status_code
45
+
46
+ def to_dict(self, *, include_cause: bool = False) -> dict[str, Any]:
47
+ data = {
48
+ "error": self.__class__.__name__,
49
+ "message": self.message,
50
+ "status_code": self.status_code,
51
+ **({"details": self.details} if self.details else {}),
52
+ }
53
+ if include_cause and (cause := self.get_cause()):
54
+ data["cause"] = repr(cause)
55
+ return data
56
+
57
+ def get_cause(self) -> Exception | None:
58
+ """Get the cause of this error, if any."""
59
+ return self.__cause__ if hasattr(self, "__cause__") else None
60
+
61
+ @classmethod
62
+ def from_value(
63
+ cls,
64
+ value: Any,
65
+ *,
66
+ expected: str | None = None,
67
+ message: str | None = None,
68
+ cause: Exception | None = None,
69
+ **extra: Any,
70
+ ):
71
+ """Create a ValidationError from a value with optional expected type and message."""
72
+ details = {
73
+ "value": value,
74
+ "type": type(value).__name__,
75
+ **({"expected": expected} if expected else {}),
76
+ **extra,
77
+ }
78
+ return cls(message=message, details=details, cause=cause)
79
+
80
+
81
+ class ValidationError(LionError):
82
+ """Exception raised when validation fails."""
83
+
84
+ default_message = "Validation failed"
85
+ default_status_code = 422
86
+ __slots__ = ()
87
+
88
+
89
+ class NotFoundError(LionError):
90
+ """Exception raised when an item is not found."""
91
+
92
+ default_message = "Item not found"
93
+ default_status_code = 404
94
+ __slots__ = ()
95
+
96
+
97
+ class ExistsError(LionError):
98
+ """Exception raised when an item already exists."""
99
+
100
+ default_message = "Item already exists"
101
+ default_status_code = 409
102
+ __slots__ = ()
103
+
104
+
105
+ class ObservationError(LionError):
106
+ """Exception raised when an observation fails."""
107
+
108
+ default_message = "Observation failed"
109
+ default_status_code = 500
110
+ __slots__ = ()
111
+
112
+
113
+ class ResourceError(LionError):
114
+ """Exception raised when resource access fails."""
115
+
116
+ default_message = "Resource error"
117
+ default_status_code = 429
118
+ __slots__ = ()
119
+
120
+
121
+ class RateLimitError(LionError):
122
+ __slots__ = ("retry_after",) # one extra attr
123
+ default_message = "Rate limit exceeded"
124
+ default_status_code = 429
125
+
126
+ def __init__(self, retry_after: float, **kw):
127
+ super().__init__(**kw)
128
+ object.__setattr__(self, "retry_after", retry_after)
129
+
130
+
131
+ class IDError(LionError):
132
+ pass
133
+
134
+
135
+ class RelationError(LionError):
136
+ pass
137
+
138
+
139
+ class OperationError(LionError):
140
+ pass
141
+
142
+
143
+ class ExecutionError(LionError):
144
+ pass
145
+
146
+
147
+ ItemNotFoundError = NotFoundError
148
+ ItemExistsError = ExistsError
@@ -0,0 +1,3 @@
1
+ from .fields import *
2
+ from .models import *
3
+ from .protocols.types import *
@@ -63,12 +63,14 @@ class AppSettings(BaseSettings, frozen=True):
63
63
  GROQ_API_KEY: SecretStr | None = None
64
64
  ANTHROPIC_API_KEY: SecretStr | None = None
65
65
 
66
+ OPENAI_DEFAULT_MODEL: str = "gpt-4.1-mini"
67
+
66
68
  # defaults models
67
69
  LIONAGI_EMBEDDING_PROVIDER: str = "openai"
68
70
  LIONAGI_EMBEDDING_MODEL: str = "text-embedding-3-small"
69
71
 
70
72
  LIONAGI_CHAT_PROVIDER: str = "openai"
71
- LIONAGI_CHAT_MODEL: str = "gpt-4.1-nano"
73
+ LIONAGI_CHAT_MODEL: str = "gpt-4.1-mini"
72
74
 
73
75
  # default storage
74
76
  LIONAGI_AUTO_STORE_EVENT: bool = False
@@ -263,7 +263,7 @@ class OperableModel(HashableModel):
263
263
  Dictionary mapping field names to FieldInfo objects,
264
264
  excluding the extra_fields field itself
265
265
  """
266
- a = {**self.model_fields, **self.extra_fields}
266
+ a = {**type(self).model_fields, **self.extra_fields}
267
267
  a.pop("extra_fields", None)
268
268
  a.pop("extra_field_models", None) # Exclude internal field tracking
269
269
  return a
@@ -358,7 +358,12 @@ class OperableModel(HashableModel):
358
358
  for k, v in kwargs.items():
359
359
  self.field_setattr(field_name, k, v)
360
360
  else:
361
- self.extra_fields[field_name] = Field(**kwargs)
361
+ _kwargs = {
362
+ k: v
363
+ for k, v in kwargs.items()
364
+ if k not in ("name", "annotation", "validator_kwargs")
365
+ }
366
+ self.extra_fields[field_name] = Field(**_kwargs)
362
367
 
363
368
  # Handle no explicit defined field
364
369
  if not field_obj and not kwargs:
@@ -478,7 +483,7 @@ class OperableModel(HashableModel):
478
483
  raise KeyError(f"Field {field_name} not found in object fields.")
479
484
 
480
485
  if str(attr).strip("s").lower() == "annotation":
481
- return self.model_fields[field_name].annotation
486
+ return type(self).model_fields[field_name].annotation
482
487
 
483
488
  field_obj = all_fields[field_name]
484
489
 
@@ -349,7 +349,6 @@ class DependencyAwareExecutor:
349
349
  and branch.metadata
350
350
  and branch.metadata.get("pending_context_inheritance")
351
351
  ):
352
-
353
352
  primary_dep_id = branch.metadata.get("inherit_from_operation")
354
353
  if primary_dep_id and primary_dep_id in self.results:
355
354
  # Find the primary dependency's branch
@@ -30,6 +30,8 @@ class EventStatus(str, Enum):
30
30
  PROCESSING = "processing"
31
31
  COMPLETED = "completed"
32
32
  FAILED = "failed"
33
+ CANCELLED = "cancelled"
34
+ ABORTED = "aborted"
33
35
 
34
36
 
35
37
  class Execution:
@@ -13,18 +13,19 @@ from pydantic import BaseModel, Field, PrivateAttr, field_validator
13
13
 
14
14
  from lionagi.utils import create_path, to_dict
15
15
 
16
- from .._concepts import Manager
17
16
  from .element import Element
18
17
  from .pile import Pile
19
18
 
20
19
  __all__ = (
20
+ "DataLoggerConfig",
21
21
  "LogManagerConfig",
22
22
  "Log",
23
+ "DataLogger",
23
24
  "LogManager",
24
25
  )
25
26
 
26
27
 
27
- class LogManagerConfig(BaseModel):
28
+ class DataLoggerConfig(BaseModel):
28
29
  persist_dir: str | Path = "./data/logs"
29
30
  subfolder: str | None = None
30
31
  file_prefix: str | None = None
@@ -101,7 +102,7 @@ class Log(Element):
101
102
  return cls(content=content)
102
103
 
103
104
 
104
- class LogManager(Manager):
105
+ class DataLogger:
105
106
  """
106
107
  Manages a collection of logs, optionally auto-dumping them
107
108
  to CSV or JSON when capacity is reached or at program exit.
@@ -111,7 +112,7 @@ class LogManager(Manager):
111
112
  self,
112
113
  *,
113
114
  logs: Any = None,
114
- _config: LogManagerConfig = None,
115
+ _config: DataLoggerConfig = None,
115
116
  **kwargs,
116
117
  ):
117
118
  """
@@ -128,7 +129,7 @@ class LogManager(Manager):
128
129
  clear_after_dump: Whether to clear logs after saving.
129
130
  """
130
131
  if _config is None:
131
- _config = LogManagerConfig(**kwargs)
132
+ _config = DataLoggerConfig(**kwargs)
132
133
 
133
134
  if isinstance(logs, dict):
134
135
  self.logs = Pile.from_dict(logs)
@@ -188,8 +189,15 @@ class LogManager(Manager):
188
189
  if do_clear:
189
190
  self.logs.clear()
190
191
  except Exception as e:
191
- logging.error(f"Failed to dump logs: {e}")
192
- raise
192
+ # Check if it's a JSON serialization error with complex objects
193
+ if "JSON serializable" in str(e):
194
+ logging.debug(f"Could not serialize logs to JSON: {e}")
195
+ # Don't raise for JSON serialization issues during dumps
196
+ if clear is not False:
197
+ self.logs.clear() # Still clear if requested
198
+ else:
199
+ logging.error(f"Failed to dump logs: {e}")
200
+ raise
193
201
 
194
202
  async def adump(
195
203
  self,
@@ -222,16 +230,24 @@ class LogManager(Manager):
222
230
  try:
223
231
  self.dump(clear=self._config.clear_after_dump)
224
232
  except Exception as e:
225
- logging.error(f"Failed to save logs on exit: {e}")
233
+ # Only log debug level for JSON serialization errors during exit
234
+ # These are non-critical and often occur with complex objects
235
+ if "JSON serializable" in str(e):
236
+ logging.debug(f"Could not serialize logs to JSON: {e}")
237
+ else:
238
+ logging.error(f"Failed to save logs on exit: {e}")
226
239
 
227
240
  @classmethod
228
241
  def from_config(
229
- cls, config: LogManagerConfig, logs: Any = None
230
- ) -> LogManager:
242
+ cls, config: DataLoggerConfig, logs: Any = None
243
+ ) -> DataLogger:
231
244
  """
232
245
  Construct a LogManager from a LogManagerConfig.
233
246
  """
234
247
  return cls(_config=config, logs=logs)
235
248
 
236
249
 
250
+ LogManagerConfig = DataLoggerConfig
251
+ LogManager = DataLogger
252
+
237
253
  # File: lionagi/protocols/generic/log.py
@@ -168,7 +168,7 @@ class Step:
168
168
  ACTION_REQUESTS_FIELD,
169
169
  ]
170
170
  )
171
- if "reason" in operative.response_model.model_fields:
171
+ if "reason" in type(operative.response_model).model_fields:
172
172
  field_models.extend([REASON_FIELD])
173
173
 
174
174
  operative = Step._create_response_type(
@@ -18,7 +18,13 @@ from .forms.flow import FlowDefinition, FlowStep
18
18
  from .forms.report import BaseForm, Form, Report
19
19
  from .generic.element import ID, Element, IDError, IDType, validate_order
20
20
  from .generic.event import Event, EventStatus, Execution
21
- from .generic.log import Log, LogManager, LogManagerConfig
21
+ from .generic.log import (
22
+ DataLogger,
23
+ DataLoggerConfig,
24
+ Log,
25
+ LogManager,
26
+ LogManagerConfig,
27
+ )
22
28
  from .generic.pile import Pile, to_list_type
23
29
  from .generic.processor import Executor, Processor
24
30
  from .generic.progression import Progression, prog
@@ -107,4 +113,6 @@ __all__ = (
107
113
  "FunctionCalling",
108
114
  "ToolRef",
109
115
  "MailManager",
116
+ "DataLogger",
117
+ "DataLoggerConfig",
110
118
  )
@@ -1,9 +1,6 @@
1
- # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
- #
3
- # SPDX-License-Identifier: Apache-2.0
4
-
5
1
  from .connections.api_calling import APICalling
6
2
  from .connections.endpoint import Endpoint, EndpointConfig
3
+ from .hooks import *
7
4
  from .imodel import iModel
8
5
  from .manager import iModelManager
9
6
  from .rate_limited_processor import RateLimitedAPIExecutor
@@ -17,4 +14,9 @@ __all__ = (
17
14
  "TokenCalculator",
18
15
  "iModel",
19
16
  "iModelManager",
17
+ "HookEventTypes",
18
+ "HookDict",
19
+ "AssosiatedEventInfo",
20
+ "HookEvent",
21
+ "HookRegistry",
20
22
  )