lionagi 0.18.0__tar.gz → 0.18.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 (322) hide show
  1. {lionagi-0.18.0 → lionagi-0.18.2}/.coveragerc +0 -4
  2. {lionagi-0.18.0 → lionagi-0.18.2}/.github/workflows/codeql.yml +3 -3
  3. {lionagi-0.18.0 → lionagi-0.18.2}/AGENTS.md +6 -0
  4. {lionagi-0.18.0 → lionagi-0.18.2}/PKG-INFO +6 -5
  5. {lionagi-0.18.0 → lionagi-0.18.2}/README.md +3 -3
  6. lionagi-0.18.2/benchmarks/comparisons/README.md +246 -0
  7. lionagi-0.18.2/benchmarks/comparisons/benchmark_detailed_20251015_141023.csv +901 -0
  8. lionagi-0.18.2/benchmarks/comparisons/benchmark_results_20251015_141023.json +18965 -0
  9. lionagi-0.18.2/benchmarks/comparisons/benchmark_summary_20251015_141023.csv +46 -0
  10. lionagi-0.18.2/benchmarks/comparisons/report.md +200 -0
  11. lionagi-0.18.2/cookbooks/006_operation_graphs_claim_extraction.ipynb +831 -0
  12. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/007_fan_out_in.py +5 -6
  13. lionagi-0.18.2/lionagi/__init__.py +141 -0
  14. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/_errors.py +0 -5
  15. lionagi-0.18.2/lionagi/adapters/spec_adapters/__init__.py +9 -0
  16. lionagi-0.18.2/lionagi/adapters/spec_adapters/_protocol.py +236 -0
  17. lionagi-0.18.2/lionagi/adapters/spec_adapters/pydantic_field.py +158 -0
  18. lionagi-0.18.2/lionagi/fields.py +83 -0
  19. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/__init__.py +3 -1
  20. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/_async_call.py +2 -2
  21. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/concurrency/primitives.py +4 -4
  22. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/concurrency/task.py +1 -0
  23. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/fuzzy/_fuzzy_match.py +2 -2
  24. lionagi-0.18.2/lionagi/ln/types/__init__.py +51 -0
  25. lionagi-0.18.2/lionagi/ln/types/_sentinel.py +154 -0
  26. lionagi-0.18.0/lionagi/ln/types.py → lionagi-0.18.2/lionagi/ln/types/base.py +108 -168
  27. lionagi-0.18.2/lionagi/ln/types/operable.py +221 -0
  28. lionagi-0.18.2/lionagi/ln/types/spec.py +441 -0
  29. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/models/field_model.py +69 -7
  30. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/models/hashable_model.py +2 -3
  31. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/models/model_params.py +4 -3
  32. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/ReAct/ReAct.py +1 -1
  33. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/act/act.py +3 -3
  34. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/builder.py +5 -7
  35. lionagi-0.18.2/lionagi/operations/fields.py +380 -0
  36. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/flow.py +4 -6
  37. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/node.py +4 -4
  38. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/operate/operate.py +123 -89
  39. lionagi-0.18.2/lionagi/operations/operate/operative.py +198 -0
  40. lionagi-0.18.2/lionagi/operations/operate/step.py +203 -0
  41. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/select/select.py +1 -1
  42. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/select/utils.py +7 -1
  43. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/types.py +7 -7
  44. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/action/manager.py +5 -6
  45. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/contracts.py +2 -2
  46. lionagi-0.18.2/lionagi/protocols/generic/__init__.py +24 -0
  47. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/generic/element.py +36 -127
  48. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/generic/pile.py +9 -10
  49. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/generic/progression.py +23 -22
  50. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/graph/edge.py +6 -5
  51. lionagi-0.18.2/lionagi/protocols/ids.py +38 -0
  52. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/messages/__init__.py +3 -1
  53. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/messages/base.py +7 -6
  54. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/messages/instruction.py +0 -1
  55. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/messages/message.py +2 -2
  56. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/types.py +1 -11
  57. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/connections/__init__.py +3 -0
  58. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/connections/providers/claude_code_cli.py +3 -2
  59. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/hooks/_types.py +1 -1
  60. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/hooks/_utils.py +1 -1
  61. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/hooks/hook_event.py +3 -8
  62. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/hooks/hook_registry.py +5 -5
  63. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/hooks/hooked_event.py +61 -1
  64. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/imodel.py +24 -20
  65. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/third_party/claude_code.py +1 -2
  66. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/third_party/openai_models.py +24 -22
  67. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/token_calculator.py +1 -94
  68. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/session/branch.py +26 -228
  69. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/session/session.py +5 -90
  70. lionagi-0.18.2/lionagi/version.py +1 -0
  71. {lionagi-0.18.0 → lionagi-0.18.2}/pyproject.toml +3 -2
  72. {lionagi-0.18.0 → lionagi-0.18.2}/uv.lock +9 -5
  73. lionagi-0.18.0/benchmarks/comparisons/README.md +0 -224
  74. lionagi-0.18.0/benchmarks/comparisons/benchmark_detailed_20250922_182217.csv +0 -901
  75. lionagi-0.18.0/benchmarks/comparisons/benchmark_results_20250922_182217.json +0 -18965
  76. lionagi-0.18.0/benchmarks/comparisons/benchmark_summary_20250922_182217.csv +0 -46
  77. lionagi-0.18.0/benchmarks/comparisons/report.md +0 -200
  78. lionagi-0.18.0/cookbooks/006_operation_graphs_claim_extraction.ipynb +0 -788
  79. lionagi-0.18.0/lionagi/__init__.py +0 -98
  80. lionagi-0.18.0/lionagi/fields/__init__.py +0 -47
  81. lionagi-0.18.0/lionagi/fields/action.py +0 -188
  82. lionagi-0.18.0/lionagi/fields/base.py +0 -153
  83. lionagi-0.18.0/lionagi/fields/code.py +0 -239
  84. lionagi-0.18.0/lionagi/fields/file.py +0 -234
  85. lionagi-0.18.0/lionagi/fields/instruct.py +0 -135
  86. lionagi-0.18.0/lionagi/fields/reason.py +0 -55
  87. lionagi-0.18.0/lionagi/fields/research.py +0 -52
  88. lionagi-0.18.0/lionagi/operations/brainstorm/brainstorm.py +0 -498
  89. lionagi-0.18.0/lionagi/operations/brainstorm/prompt.py +0 -11
  90. lionagi-0.18.0/lionagi/operations/instruct/instruct.py +0 -28
  91. lionagi-0.18.0/lionagi/operations/plan/__init__.py +0 -6
  92. lionagi-0.18.0/lionagi/operations/plan/plan.py +0 -386
  93. lionagi-0.18.0/lionagi/operations/plan/prompt.py +0 -25
  94. lionagi-0.18.0/lionagi/operations/utils.py +0 -45
  95. lionagi-0.18.0/lionagi/protocols/forms/base.py +0 -85
  96. lionagi-0.18.0/lionagi/protocols/forms/flow.py +0 -79
  97. lionagi-0.18.0/lionagi/protocols/forms/form.py +0 -86
  98. lionagi-0.18.0/lionagi/protocols/forms/report.py +0 -48
  99. lionagi-0.18.0/lionagi/protocols/ids.py +0 -81
  100. lionagi-0.18.0/lionagi/protocols/mail/__init__.py +0 -2
  101. lionagi-0.18.0/lionagi/protocols/mail/exchange.py +0 -220
  102. lionagi-0.18.0/lionagi/protocols/mail/mail.py +0 -51
  103. lionagi-0.18.0/lionagi/protocols/mail/mailbox.py +0 -103
  104. lionagi-0.18.0/lionagi/protocols/mail/manager.py +0 -218
  105. lionagi-0.18.0/lionagi/protocols/mail/package.py +0 -101
  106. lionagi-0.18.0/lionagi/protocols/operatives/__init__.py +0 -2
  107. lionagi-0.18.0/lionagi/protocols/operatives/operative.py +0 -362
  108. lionagi-0.18.0/lionagi/protocols/operatives/step.py +0 -227
  109. lionagi-0.18.0/lionagi/service/connections/mcp/__init__.py +0 -2
  110. lionagi-0.18.0/lionagi/service/connections/providers/__init__.py +0 -2
  111. lionagi-0.18.0/lionagi/tools/__init__.py +0 -2
  112. lionagi-0.18.0/lionagi/tools/file/__init__.py +0 -2
  113. lionagi-0.18.0/lionagi/version.py +0 -1
  114. {lionagi-0.18.0 → lionagi-0.18.2}/.env.example +0 -0
  115. {lionagi-0.18.0 → lionagi-0.18.2}/.github/FUNDING.yml +0 -0
  116. {lionagi-0.18.0 → lionagi-0.18.2}/.github/dependabot.yml +0 -0
  117. {lionagi-0.18.0 → lionagi-0.18.2}/.github/workflows/benchmarks.yml +0 -0
  118. {lionagi-0.18.0 → lionagi-0.18.2}/.github/workflows/ci.yml +0 -0
  119. {lionagi-0.18.0 → lionagi-0.18.2}/.github/workflows/docs-deploy.yml +0 -0
  120. {lionagi-0.18.0 → lionagi-0.18.2}/.github/workflows/refresh-bench-baselines.yml +0 -0
  121. {lionagi-0.18.0 → lionagi-0.18.2}/.github/workflows/release.yml +0 -0
  122. {lionagi-0.18.0 → lionagi-0.18.2}/.gitignore +0 -0
  123. {lionagi-0.18.0 → lionagi-0.18.2}/.pre-commit-config.yaml +0 -0
  124. {lionagi-0.18.0 → lionagi-0.18.2}/.python-version +0 -0
  125. {lionagi-0.18.0 → lionagi-0.18.2}/CODE_OF_CONDUCT.md +0 -0
  126. {lionagi-0.18.0 → lionagi-0.18.2}/CONTRIBUTING.md +0 -0
  127. {lionagi-0.18.0 → lionagi-0.18.2}/LICENSE +0 -0
  128. {lionagi-0.18.0 → lionagi-0.18.2}/assets/operation_builder.gif +0 -0
  129. {lionagi-0.18.0 → lionagi-0.18.2}/benchmarks/README.md +0 -0
  130. {lionagi-0.18.0 → lionagi-0.18.2}/benchmarks/baselines/.gitkeep +0 -0
  131. {lionagi-0.18.0 → lionagi-0.18.2}/benchmarks/baselines/concurrency-asyncio.json +0 -0
  132. {lionagi-0.18.0 → lionagi-0.18.2}/benchmarks/baselines/concurrency-trio.json +0 -0
  133. {lionagi-0.18.0 → lionagi-0.18.2}/benchmarks/baselines/fuzzy.json +0 -0
  134. {lionagi-0.18.0 → lionagi-0.18.2}/benchmarks/baselines/ln-asyncio.json +0 -0
  135. {lionagi-0.18.0 → lionagi-0.18.2}/benchmarks/baselines/ln-trio.json +0 -0
  136. {lionagi-0.18.0 → lionagi-0.18.2}/benchmarks/ci_compare.py +0 -0
  137. {lionagi-0.18.0 → lionagi-0.18.2}/benchmarks/comparisons/benchmark_professional.py +0 -0
  138. {lionagi-0.18.0 → lionagi-0.18.2}/benchmarks/comparisons/generate_benchmark_report.py +0 -0
  139. {lionagi-0.18.0 → lionagi-0.18.2}/benchmarks/concurrency_bench.py +0 -0
  140. {lionagi-0.18.0 → lionagi-0.18.2}/benchmarks/fuzzy_bench.py +0 -0
  141. {lionagi-0.18.0 → lionagi-0.18.2}/benchmarks/ln_bench.py +0 -0
  142. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/001_branch_converse.ipynb +0 -0
  143. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/002_branch_interact.ipynb +0 -0
  144. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/003_branch_info.ipynb +0 -0
  145. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/004_conversation_patterns.ipynb +0 -0
  146. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/005_react_basics.ipynb +0 -0
  147. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/data/002_comedian.json +0 -0
  148. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/data/002_critic.json +0 -0
  149. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/data/006_lion_proof_ch2.md +0 -0
  150. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/using_claude_code/claude_proxy/README.md +0 -0
  151. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/using_claude_code/claude_proxy/claude_code_proxy.py +0 -0
  152. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/using_claude_code/claude_proxy/run_w_claude_code_proxy.ipynb +0 -0
  153. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/using_claude_code/using_claude_code.py +0 -0
  154. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/using_mcp/.mcp.json +0 -0
  155. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/using_mcp/README.md +0 -0
  156. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/using_mcp/react_mcp_with_schema.py +0 -0
  157. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/using_mcp/search_group.py +0 -0
  158. {lionagi-0.18.0 → lionagi-0.18.2}/cookbooks/using_mcp/search_group_config.json +0 -0
  159. {lionagi-0.18.0 → lionagi-0.18.2}/docs/DOCUMENTATION_STANDARDS.md +0 -0
  160. {lionagi-0.18.0 → lionagi-0.18.2}/docs/advanced/custom-operations.md +0 -0
  161. {lionagi-0.18.0 → lionagi-0.18.2}/docs/advanced/error-handling.md +0 -0
  162. {lionagi-0.18.0 → lionagi-0.18.2}/docs/advanced/flow-composition.md +0 -0
  163. {lionagi-0.18.0 → lionagi-0.18.2}/docs/advanced/index.md +0 -0
  164. {lionagi-0.18.0 → lionagi-0.18.2}/docs/advanced/observability.md +0 -0
  165. {lionagi-0.18.0 → lionagi-0.18.2}/docs/advanced/performance.md +0 -0
  166. {lionagi-0.18.0 → lionagi-0.18.2}/docs/code-of-conduct.md +0 -0
  167. {lionagi-0.18.0 → lionagi-0.18.2}/docs/contributing.md +0 -0
  168. {lionagi-0.18.0 → lionagi-0.18.2}/docs/cookbook/brainstorming.md +0 -0
  169. {lionagi-0.18.0 → lionagi-0.18.2}/docs/cookbook/claim-extraction.md +0 -0
  170. {lionagi-0.18.0 → lionagi-0.18.2}/docs/cookbook/code-review-crew.md +0 -0
  171. {lionagi-0.18.0 → lionagi-0.18.2}/docs/cookbook/data-persistence.md +0 -0
  172. {lionagi-0.18.0 → lionagi-0.18.2}/docs/cookbook/hr-automation.md +0 -0
  173. {lionagi-0.18.0 → lionagi-0.18.2}/docs/cookbook/index.md +0 -0
  174. {lionagi-0.18.0 → lionagi-0.18.2}/docs/cookbook/research-synthesis.md +0 -0
  175. {lionagi-0.18.0 → lionagi-0.18.2}/docs/core-concepts/index.md +0 -0
  176. {lionagi-0.18.0 → lionagi-0.18.2}/docs/core-concepts/lionagi-philosophy.md +0 -0
  177. {lionagi-0.18.0 → lionagi-0.18.2}/docs/core-concepts/messages-and-memory.md +0 -0
  178. {lionagi-0.18.0 → lionagi-0.18.2}/docs/core-concepts/models-and-providers.md +0 -0
  179. {lionagi-0.18.0 → lionagi-0.18.2}/docs/core-concepts/operations.md +0 -0
  180. {lionagi-0.18.0 → lionagi-0.18.2}/docs/core-concepts/sessions-and-branches.md +0 -0
  181. {lionagi-0.18.0 → lionagi-0.18.2}/docs/core-concepts/tools-and-functions.md +0 -0
  182. {lionagi-0.18.0 → lionagi-0.18.2}/docs/for-ai-agents/claude-code-usage.md +0 -0
  183. {lionagi-0.18.0 → lionagi-0.18.2}/docs/for-ai-agents/index.md +0 -0
  184. {lionagi-0.18.0 → lionagi-0.18.2}/docs/for-ai-agents/orchestration-guide.md +0 -0
  185. {lionagi-0.18.0 → lionagi-0.18.2}/docs/for-ai-agents/pattern-selection.md +0 -0
  186. {lionagi-0.18.0 → lionagi-0.18.2}/docs/for-ai-agents/self-improvement.md +0 -0
  187. {lionagi-0.18.0 → lionagi-0.18.2}/docs/includes/abbreviations.md +0 -0
  188. {lionagi-0.18.0 → lionagi-0.18.2}/docs/index.md +0 -0
  189. {lionagi-0.18.0 → lionagi-0.18.2}/docs/integrations/databases.md +0 -0
  190. {lionagi-0.18.0 → lionagi-0.18.2}/docs/integrations/dspy-optimization.md +0 -0
  191. {lionagi-0.18.0 → lionagi-0.18.2}/docs/integrations/index.md +0 -0
  192. {lionagi-0.18.0 → lionagi-0.18.2}/docs/integrations/llamaindex-rag.md +0 -0
  193. {lionagi-0.18.0 → lionagi-0.18.2}/docs/integrations/llm-providers.md +0 -0
  194. {lionagi-0.18.0 → lionagi-0.18.2}/docs/integrations/mcp-servers.md +0 -0
  195. {lionagi-0.18.0 → lionagi-0.18.2}/docs/integrations/tools.md +0 -0
  196. {lionagi-0.18.0 → lionagi-0.18.2}/docs/integrations/vector-stores.md +0 -0
  197. {lionagi-0.18.0 → lionagi-0.18.2}/docs/patterns/conditional-flows.md +0 -0
  198. {lionagi-0.18.0 → lionagi-0.18.2}/docs/patterns/fan-out-in.md +0 -0
  199. {lionagi-0.18.0 → lionagi-0.18.2}/docs/patterns/index.md +0 -0
  200. {lionagi-0.18.0 → lionagi-0.18.2}/docs/patterns/react-with-rag.md +0 -0
  201. {lionagi-0.18.0 → lionagi-0.18.2}/docs/patterns/sequential-analysis.md +0 -0
  202. {lionagi-0.18.0 → lionagi-0.18.2}/docs/patterns/tournament-validation.md +0 -0
  203. {lionagi-0.18.0 → lionagi-0.18.2}/docs/problem-statement.md +0 -0
  204. {lionagi-0.18.0 → lionagi-0.18.2}/docs/quickstart/installation.md +0 -0
  205. {lionagi-0.18.0 → lionagi-0.18.2}/docs/quickstart/your-first-flow.md +0 -0
  206. {lionagi-0.18.0 → lionagi-0.18.2}/docs/reference/api/index.md +0 -0
  207. {lionagi-0.18.0 → lionagi-0.18.2}/docs/reference/changelog.md +0 -0
  208. {lionagi-0.18.0 → lionagi-0.18.2}/docs/reference/troubleshooting.md +0 -0
  209. {lionagi-0.18.0 → lionagi-0.18.2}/docs/stylesheets/extra.css +0 -0
  210. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/_class_registry.py +0 -0
  211. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/_types.py +0 -0
  212. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/adapters/__init__.py +0 -0
  213. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/adapters/_utils.py +0 -0
  214. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/adapters/async_postgres_adapter.py +0 -0
  215. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/config.py +0 -0
  216. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/libs/__init__.py +0 -0
  217. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/libs/file/__init__.py +0 -0
  218. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/libs/file/chunk.py +0 -0
  219. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/libs/file/process.py +0 -0
  220. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/libs/schema/__init__.py +0 -0
  221. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/libs/schema/as_readable.py +0 -0
  222. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/libs/schema/breakdown_pydantic_annotation.py +0 -0
  223. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/libs/schema/extract_code_block.py +0 -0
  224. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/libs/schema/extract_docstring.py +0 -0
  225. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/libs/schema/function_to_schema.py +0 -0
  226. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/libs/schema/load_pydantic_model_from_schema.py +0 -0
  227. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/libs/schema/minimal_yaml.py +0 -0
  228. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/libs/validate/__init__.py +0 -0
  229. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/libs/validate/common_field_validators.py +0 -0
  230. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/libs/validate/to_num.py +0 -0
  231. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/libs/validate/validate_boolean.py +0 -0
  232. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/_hash.py +0 -0
  233. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/_json_dump.py +0 -0
  234. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/_list_call.py +0 -0
  235. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/_to_list.py +0 -0
  236. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/_utils.py +0 -0
  237. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/concurrency/__init__.py +0 -0
  238. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/concurrency/_compat.py +0 -0
  239. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/concurrency/cancel.py +0 -0
  240. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/concurrency/errors.py +0 -0
  241. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/concurrency/patterns.py +0 -0
  242. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/concurrency/resource_tracker.py +0 -0
  243. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/concurrency/utils.py +0 -0
  244. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/fuzzy/__init__.py +0 -0
  245. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/fuzzy/_extract_json.py +0 -0
  246. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/fuzzy/_fuzzy_json.py +0 -0
  247. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/fuzzy/_fuzzy_validate.py +0 -0
  248. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/fuzzy/_string_similarity.py +0 -0
  249. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/ln/fuzzy/_to_dict.py +0 -0
  250. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/models/__init__.py +0 -0
  251. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/models/operable_model.py +0 -0
  252. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/models/schema_model.py +0 -0
  253. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/ReAct/__init__.py +0 -0
  254. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/ReAct/utils.py +0 -0
  255. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/__init__.py +0 -0
  256. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/_visualize_graph.py +0 -0
  257. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/act/__init__.py +0 -0
  258. {lionagi-0.18.0/lionagi/operations/brainstorm → lionagi-0.18.2/lionagi/operations/chat}/__init__.py +0 -0
  259. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/chat/chat.py +0 -0
  260. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/communicate/__init__.py +0 -0
  261. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/communicate/communicate.py +0 -0
  262. {lionagi-0.18.0/lionagi/operations/chat → lionagi-0.18.2/lionagi/operations/interpret}/__init__.py +0 -0
  263. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/interpret/interpret.py +0 -0
  264. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/manager.py +0 -0
  265. {lionagi-0.18.0/lionagi/operations/instruct → lionagi-0.18.2/lionagi/operations/operate}/__init__.py +0 -0
  266. {lionagi-0.18.0/lionagi/operations/interpret → lionagi-0.18.2/lionagi/operations/parse}/__init__.py +0 -0
  267. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/operations/parse/parse.py +0 -0
  268. {lionagi-0.18.0/lionagi/operations/operate → lionagi-0.18.2/lionagi/operations/select}/__init__.py +0 -0
  269. {lionagi-0.18.0/lionagi/operations/parse → lionagi-0.18.2/lionagi/protocols}/__init__.py +0 -0
  270. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/_concepts.py +0 -0
  271. {lionagi-0.18.0/lionagi/operations/select → lionagi-0.18.2/lionagi/protocols/action}/__init__.py +0 -0
  272. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/action/function_calling.py +0 -0
  273. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/action/tool.py +0 -0
  274. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/generic/event.py +0 -0
  275. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/generic/log.py +0 -0
  276. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/generic/processor.py +0 -0
  277. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/graph/__init__.py +0 -0
  278. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/graph/graph.py +0 -0
  279. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/graph/node.py +0 -0
  280. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/messages/action_request.py +0 -0
  281. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/messages/action_response.py +0 -0
  282. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/messages/assistant_response.py +0 -0
  283. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/messages/manager.py +0 -0
  284. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/protocols/messages/system.py +0 -0
  285. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/py.typed +0 -0
  286. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/__init__.py +0 -0
  287. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/broadcaster.py +0 -0
  288. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/connections/api_calling.py +0 -0
  289. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/connections/endpoint.py +0 -0
  290. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/connections/endpoint_config.py +0 -0
  291. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/connections/header_factory.py +0 -0
  292. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/connections/match_endpoint.py +0 -0
  293. {lionagi-0.18.0/lionagi/protocols → lionagi-0.18.2/lionagi/service/connections/mcp}/__init__.py +0 -0
  294. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/connections/mcp/wrapper.py +0 -0
  295. {lionagi-0.18.0/lionagi/protocols/action → lionagi-0.18.2/lionagi/service/connections/providers}/__init__.py +0 -0
  296. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/connections/providers/anthropic_.py +0 -0
  297. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/connections/providers/exa_.py +0 -0
  298. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/connections/providers/nvidia_nim_.py +0 -0
  299. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/connections/providers/oai_.py +0 -0
  300. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/connections/providers/ollama_.py +0 -0
  301. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/connections/providers/perplexity_.py +0 -0
  302. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/hooks/__init__.py +0 -0
  303. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/manager.py +0 -0
  304. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/rate_limited_processor.py +0 -0
  305. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/resilience.py +0 -0
  306. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/third_party/README.md +0 -0
  307. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/third_party/__init__.py +0 -0
  308. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/third_party/anthropic_models.py +0 -0
  309. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/third_party/exa_models.py +0 -0
  310. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/service/third_party/pplx_models.py +0 -0
  311. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/session/__init__.py +0 -0
  312. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/session/prompts.py +0 -0
  313. {lionagi-0.18.0/lionagi/protocols/forms → lionagi-0.18.2/lionagi/tools}/__init__.py +0 -0
  314. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/tools/base.py +0 -0
  315. {lionagi-0.18.0/lionagi/protocols/generic → lionagi-0.18.2/lionagi/tools/file}/__init__.py +0 -0
  316. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/tools/file/reader.py +0 -0
  317. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/tools/types.py +0 -0
  318. {lionagi-0.18.0 → lionagi-0.18.2}/lionagi/utils.py +0 -0
  319. {lionagi-0.18.0 → lionagi-0.18.2}/main.py +0 -0
  320. {lionagi-0.18.0 → lionagi-0.18.2}/mkdocs.yml +0 -0
  321. {lionagi-0.18.0 → lionagi-0.18.2}/scripts/README.md +0 -0
  322. {lionagi-0.18.0 → lionagi-0.18.2}/scripts/update_openai_models.py +0 -0
@@ -5,11 +5,7 @@ concurrency = thread,multiprocessing
5
5
  omit =
6
6
  tests/*
7
7
  lionagi/service/third_party/*
8
- lionagi/operations/brainstorm/*
9
- lionagi/operations/plan/*
10
- lionagi/operations/select/*
11
8
  lionagi/operations/_visualize_graph.py
12
- lionagi/operations/types.py
13
9
  lionagi/tools/file/reader.py
14
10
  lionagi/tools/types.py
15
11
  lionagi/_types.py
@@ -27,14 +27,14 @@ jobs:
27
27
  uses: actions/checkout@v5
28
28
 
29
29
  - name: Initialize CodeQL
30
- uses: github/codeql-action/init@v3
30
+ uses: github/codeql-action/init@v4
31
31
  with:
32
32
  languages: ${{ matrix.language }}
33
33
 
34
34
  - name: Autobuild
35
- uses: github/codeql-action/autobuild@v3
35
+ uses: github/codeql-action/autobuild@v4
36
36
 
37
37
  - name: Perform CodeQL Analysis
38
- uses: github/codeql-action/analyze@v3
38
+ uses: github/codeql-action/analyze@v4
39
39
 
40
40
  # filepath: .github/workflows/codeql-analysis.yml
@@ -1,31 +1,37 @@
1
1
  # Repository Guidelines
2
2
 
3
3
  ## Project Structure & Module Organization
4
+
4
5
  - Core runtime lives in `lionagi/` with subpackages for adapters, operations, session orchestration, protocol definitions, and tool integrations.
5
6
  - Reusable assets, demos, and reference notebooks sit under `assets/`, `cookbooks/`, and `notebooks/`; automation scripts are in `scripts/`.
6
7
  - Tests mirror the package layout in `tests/` (for example `tests/session/`, `tests/operations/`) with shared fixtures in `tests/fixtures/`.
7
8
  - Documentation sources are maintained in `docs/` (MkDocs) and long-form guides in `CLAUDE.md`; published artifacts land in `site/` after builds.
8
9
 
9
10
  ## Build, Test, and Development Commands
11
+
10
12
  - Install or update the environment with `uv sync --dev`; this pulls project and tooling dependencies from `pyproject.toml` / `uv.lock`.
11
13
  - Run the full suite via `uv run pytest`; pass `-m "not slow"` or `-k session` to target subsets while retaining pytest defaults (parallel, strict markers).
12
14
  - Format and lint before committing: `uv run black .`, `uv run ruff check lionagi tests`, and `pre-commit run --all-files` for the configured hook chain.
13
15
 
14
16
  ## Coding Style & Naming Conventions
17
+
15
18
  - Follow Black’s 79-character line length and isort’s Black profile; keep imports grouped standard/third-party/local.
16
19
  - Prefer explicit type hints and Pydantic models for structured data; name modules and directories in snake_case, classes in PascalCase, async coroutines with `_async` suffix when clarity helps.
17
20
  - Avoid introducing new global state; prefer dependency injection through service or session layers within `lionagi/`.
18
21
 
19
22
  ## Testing Guidelines
23
+
20
24
  - Place unit tests adjacent to the relevant module subtree (`tests/operations/test_branch.py`, etc.) using filenames that start with `test_` and classes prefixed `Test`.
21
25
  - Leverage pytest markers declared in `pyproject.toml` (`unit`, `integration`, `slow`, `performance`); mark long-running or network-dependent flows to keep CI lean.
22
26
  - Maintain coverage by extending fixtures and factories in `tests/fixtures/`; include regression cases for bugs and concurrency edge scenarios.
23
27
 
24
28
  ## Commit & Pull Request Guidelines
29
+
25
30
  - Match the existing history: concise, sentence-case summaries in the imperative voice (e.g., `Improve session retry logic`).
26
31
  - Each PR should describe scope, testing evidence (`uv run pytest` output, linting), linked GitHub issues, and screenshots or logs for UX-facing changes.
27
32
  - Keep changesets focused, update `docs/` or `mkdocs.yml` alongside API changes, and request reviews once CI is green.
28
33
 
29
34
  ## Documentation & Configuration Notes
35
+
30
36
  - Keep `.env.example` aligned with new configuration keys; avoid committing real secrets or API tokens.
31
37
  - When altering public interfaces, update `docs/` and regenerate the MkDocs site with `uv run mkdocs build` to verify navigation.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lionagi
3
- Version: 0.18.0
3
+ Version: 0.18.2
4
4
  Summary: An Intelligence Operating System.
5
5
  Author-email: HaiyangLi <quantocean.li@gmail.com>
6
6
  License: Apache License
@@ -227,7 +227,7 @@ Requires-Dist: json-repair>=0.40.0
227
227
  Requires-Dist: msgspec>=0.18.0
228
228
  Requires-Dist: pydantic-settings>=2.8.0
229
229
  Requires-Dist: pydantic>=2.8.0
230
- Requires-Dist: pydapter[pandas]>=1.1.1
230
+ Requires-Dist: pydapter[pandas]>=1.2.0
231
231
  Requires-Dist: python-dotenv>=1.1.0
232
232
  Requires-Dist: tiktoken>=0.9.0
233
233
  Provides-Extra: all
@@ -240,6 +240,7 @@ Requires-Dist: networkx>=3.0.0; extra == 'all'
240
240
  Requires-Dist: ollama>=0.4.0; extra == 'all'
241
241
  Requires-Dist: pydapter[postgres]; extra == 'all'
242
242
  Requires-Dist: rich>=13.0.0; extra == 'all'
243
+ Requires-Dist: xmltodict>=0.12.0; extra == 'all'
243
244
  Provides-Extra: graph
244
245
  Requires-Dist: matplotlib>=3.7.0; extra == 'graph'
245
246
  Requires-Dist: networkx>=3.0.0; extra == 'graph'
@@ -465,13 +466,13 @@ from lionagi.fields import LIST_INSTRUCT_FIELD_MODEL, Instruct
465
466
  response3 = await orchestrator.operate(
466
467
  instruct=Instruct(
467
468
  instruction="create 4 research questions for parallel discovery",
468
- guidance="put into `instruct_models` field as part of your structured result message",
469
+ guidance="put into `instruct_model` field as part of your structured result message",
469
470
  context="I'd like to create an orchestration system for AI agents using lionagi"
470
471
  ),
471
472
  field_models=[LIST_INSTRUCT_FIELD_MODEL],
472
473
  )
473
474
 
474
- len(response3.instruct_models) # should be 4
475
+ len(response3.instruct_model) # should be 4
475
476
 
476
477
  async def handle_instruct(instruct):
477
478
  sub_branch = Branch(
@@ -482,7 +483,7 @@ async def handle_instruct(instruct):
482
483
 
483
484
  # run in parallel across all instruct models
484
485
  from lionagi.ln import alcall
485
- responses = await alcall(response3.instruct_models, handle_instruct)
486
+ responses = await alcall(response3.instruct_model, handle_instruct)
486
487
 
487
488
  # now hand these reports back to the orchestrator
488
489
  final_response = await orchestrator.communicate(
@@ -202,13 +202,13 @@ from lionagi.fields import LIST_INSTRUCT_FIELD_MODEL, Instruct
202
202
  response3 = await orchestrator.operate(
203
203
  instruct=Instruct(
204
204
  instruction="create 4 research questions for parallel discovery",
205
- guidance="put into `instruct_models` field as part of your structured result message",
205
+ guidance="put into `instruct_model` field as part of your structured result message",
206
206
  context="I'd like to create an orchestration system for AI agents using lionagi"
207
207
  ),
208
208
  field_models=[LIST_INSTRUCT_FIELD_MODEL],
209
209
  )
210
210
 
211
- len(response3.instruct_models) # should be 4
211
+ len(response3.instruct_model) # should be 4
212
212
 
213
213
  async def handle_instruct(instruct):
214
214
  sub_branch = Branch(
@@ -219,7 +219,7 @@ async def handle_instruct(instruct):
219
219
 
220
220
  # run in parallel across all instruct models
221
221
  from lionagi.ln import alcall
222
- responses = await alcall(response3.instruct_models, handle_instruct)
222
+ responses = await alcall(response3.instruct_model, handle_instruct)
223
223
 
224
224
  # now hand these reports back to the orchestrator
225
225
  final_response = await orchestrator.communicate(
@@ -0,0 +1,246 @@
1
+ # Agentic AI Framework Performance Benchmarks
2
+
3
+ Rigorous apples-to-apples performance comparison of major Python agentic AI
4
+ frameworks, focusing on real-world cold-start performance and memory efficiency.
5
+
6
+ ## Executive Summary
7
+
8
+ - **LionAGI delivers 2× faster cold-start performance** than the next-best
9
+ framework (LangGraph) across composites, **up to 3.3× faster** on realistic
10
+ workloads, and **54% lower memory usage**.
11
+
12
+ ### Key Results (20 runs per test • Python 3.10.15)
13
+
14
+ - **Cold Composite Performance** (geomean of medians; excludes imports): LionAGI
15
+ **153.6 ms** vs LangGraph **340.9 ms** → **LangGraph is 121.9% slower**
16
+ (**LionAGI is 2.2× faster**)
17
+ - **Memory Efficiency**: LionAGI **26.0 MB RSS** vs LangGraph 56.4 MB (**54%
18
+ lower**)
19
+ - **Consistency**: First-place performance in **4/4 cold-start categories**
20
+ - **Orchestrator Setup**: LionAGI **170.1 ms** vs LangGraph 329.0 ms (**93.4%
21
+ faster**)
22
+ - **Operational impact**: **~187 ms saved per cold start** vs LangGraph (≈ **3.1
23
+ min saved per 1k cold starts**)
24
+
25
+ ## Headline Performance Metrics
26
+
27
+ ### Cold Composite Performance (Geometric Mean of medians, excludes imports)
28
+
29
+ | Rank | Framework | Composite (ms) | RSS (MB) | USS (MB) | vs Best |
30
+ | ---- | -------------- | -------------- | -------- | -------- | ------------------ |
31
+ | 1 | **LionAGI** | 153.6 | 26.0 | 22.6 | — |
32
+ | 2 | LangGraph | 340.9 | 56.4 | 43.8 | **+121.9% slower** |
33
+ | 3 | AutoGen | 637.4 | 103.8 | 91.1 | **+314.9% slower** |
34
+ | 4 | LlamaIndex | 694.7 | 119.6 | 104.1 | **+352.2% slower** |
35
+ | 5 | LangChain Core | 1407.3 | 213.9 | 164.7 | **+816.0% slower** |
36
+
37
+ **Notes**
38
+
39
+ - Composite excludes `imports` because sub-millisecond baselines
40
+ (e.g., lazy imports) are dominated by timer granularity.
41
+ - Conservative composite (excluding `data_processing`): LionAGI **176.0 ms** vs LangGraph
42
+ **342.4 ms** → **LangGraph is 94.5% slower** (**LionAGI is 1.9× faster**).
43
+
44
+ ## Detailed Benchmark Results
45
+
46
+ _Process isolation per run • Module cache cleared • CPU pinning enabled_
47
+
48
+ ### Orchestrators (Cold) - Production-Ready State
49
+
50
+ | Framework | Median (ms) | P95 (ms) | Range | RSS (MB) | vs Best |
51
+ | -------------- | ----------- | -------- | ----------- | -------- | ------- |
52
+ | **LionAGI** | 170.1 | 177.4 | 165.5-207.6 | 26.9 | — |
53
+ | LangGraph | 329.0 | 339.9 | 324.7-392.6 | 53.4 | +93.4% |
54
+ | AutoGen | 668.4 | 713.8 | 618.9-788.3 | 105.9 | +292.9% |
55
+ | LlamaIndex | 713.7 | 763.8 | 703.5-870.2 | 130.5 | +319.6% |
56
+ | LangChain Core | 1329.7 | 1368.1 | 1315-1869 | 209.1 | +681.7% |
57
+
58
+ ### Basic Primitives (Cold) - Core Building Blocks
59
+
60
+ | Framework | Median (ms) | P95 (ms) | Range | RSS (MB) | vs Best |
61
+ | -------------- | ----------- | -------- | ----------- | -------- | ------- |
62
+ | **LionAGI** | 182.7 | 222.7 | 176.8-224.6 | 28.2 | — |
63
+ | LangGraph | 368.2 | 837.7 | 336.3-1143 | 58.6 | +101.5% |
64
+ | AutoGen | 626.2 | 650.1 | 614.9-830.3 | 101.6 | +242.7% |
65
+ | LlamaIndex | 630.0 | 689.8 | 621.4-759.6 | 85.3 | +244.8% |
66
+ | LangChain Core | 1488.5 | 1685.7 | 1377-2258 | 216.5 | +714.7% |
67
+
68
+ ### Workflow Setup (Cold) - Multi-Component Coordination
69
+
70
+ | Framework | Median (ms) | P95 (ms) | Range | RSS (MB) | vs Best |
71
+ | -------------- | ----------- | -------- | ----------- | -------- | ------- |
72
+ | **LionAGI** | 175.5 | 186.0 | 165.7-202.5 | 27.4 | — |
73
+ | LangGraph | 331.4 | 350.0 | 325.0-388.3 | 55.9 | +88.8% |
74
+ | AutoGen | 628.5 | 654.3 | 622.4-736.0 | 104.6 | +258.1% |
75
+ | LlamaIndex | 722.3 | 792.3 | 711.2-819.4 | 132.9 | +311.6% |
76
+ | LangChain Core | 1448.6 | 1624.8 | 1356-1989 | 214.0 | +725.4% |
77
+
78
+ ### Data Processing (Cold) - Realistic Workload
79
+
80
+ | Framework | Median (ms) | P95 (ms) | Range | RSS (MB) | vs Best |
81
+ | -------------- | ----------- | -------- | ----------- | -------- | -------- |
82
+ | **LionAGI** | 102.1 | 112.9 | 99.2-122.8 | 21.7 | — |
83
+ | LangGraph | 336.5 | 346.4 | 329.8-362.2 | 57.8 | +229.6% |
84
+ | AutoGen | 627.4 | 736.6 | 614.5-765.3 | 103.2 | +514.5% |
85
+ | LlamaIndex | 717.0 | 753.6 | 702.3-883.2 | 129.5 | +602.3% |
86
+ | LangChain Core | 1367.9 | 1461.8 | 1338-1885 | 216.2 | +1239.8% |
87
+
88
+ ## Performance Analysis
89
+
90
+ ### Memory Efficiency
91
+
92
+ - **LionAGI**: 26.0 MB average RSS (22.6 MB USS) — **most memory efficient**
93
+ - **LangGraph**: 56.4 MB average RSS (**+116.9% vs LionAGI**)
94
+ - **AutoGen**: 103.8 MB average RSS (**+299.2%**)
95
+ - **LlamaIndex**: 119.6 MB average RSS (**+360.0%**)
96
+ - **LangChain Core**: 213.9 MB average RSS (**+722.7%**)
97
+
98
+ ### Consistency & Reliability
99
+
100
+ - **Low variability**: See CSV for MAD/stdev; LionAGI shows tight ranges in
101
+ cold-path categories.
102
+ - **P95 performance**: Sub-230 ms P95 in all cold categories — exceptional
103
+ predictability.
104
+ - **Range stability**: Small min-max spans (typically <40ms) across cold
105
+ categories indicate highly predictable performance.
106
+
107
+ ## Feature Parity Matrix
108
+
109
+ All frameworks tested with equivalent, normalized workloads:
110
+
111
+ | Framework | Object Built | Core-Only | LLM Used | Network | Notes |
112
+ | -------------- | ---------------------- | --------- | -------- | ------- | ------------------------- |
113
+ | LionAGI | Session() | Yes | None | No | Minimal runtime container |
114
+ | LangGraph | StateGraph.compile() | Yes | None | No | One-node identity graph |
115
+ | LangChain Core | PromptTemplate\|Lambda | Yes | None | No | LCEL chain, no community |
116
+ | LlamaIndex | SimpleChatEngine | Yes | MockLLM | No | Built-in mock, no network |
117
+ | AutoGen | ConversableAgent | Yes | None | No | LLM disabled |
118
+
119
+ ## Methodology
120
+
121
+ ### Measurement Approach
122
+
123
+ - **Cold Mode**: Full import + object construction (serverless scenario)
124
+ - **Process Isolation**: Fresh Python interpreter per measurement
125
+ - **Statistical Rigor**: Median, P95, MAD, trimmed mean for outlier resistance
126
+ - **Memory Tracking**: RSS (Resident Set Size) and USS (Unique Set Size)
127
+
128
+ ### Environmental Controls
129
+
130
+ - CPU pinning for reduced scheduler noise
131
+ - Deterministic hashing (PYTHONHASHSEED=0)
132
+ - Module cache clearing between runs
133
+ - API keys blanked to prevent network calls
134
+ - 30-second timeout to prevent hangs
135
+
136
+ ### Excluded from Headlines
137
+
138
+ - **Import-only tests**: Dominated by lazy loading and timer granularity
139
+ - **Sub-millisecond measurements**: Below meaningful timer resolution
140
+
141
+ ## Reproducing Results
142
+
143
+ ```bash
144
+ # Clone repository
145
+ git clone https://github.com/lion-agi/lionagi.git
146
+ cd lionagi/benchmarks/comparisons
147
+
148
+ # Install dependencies
149
+ uv add --dev langgraph langchain-core llama-index-core pyautogen psutil
150
+ # (Recommended) Pin exact versions for reproducibility
151
+ uv lock
152
+ # Or export a frozen requirements file:
153
+ uv export --frozen --format requirements.txt > bench.requirements.txt
154
+
155
+ # Run full benchmark (20 runs, ~15 minutes)
156
+ uv run python benchmark_professional.py --runs 20 --report
157
+
158
+ # Generate report
159
+ uv run python generate_benchmark_report.py
160
+
161
+ # Quick test (3 runs)
162
+ uv run python benchmark_professional.py --runs 3
163
+ ```
164
+
165
+ ### Environment & Versions
166
+
167
+ Test environment and package versions used for benchmarks:
168
+
169
+ ```text
170
+ Hardware: Apple M2 Max, 32GB RAM
171
+ OS: macOS (Darwin 24.6.0)
172
+ Python: 3.10.15
173
+ LionAGI: v0.18.1
174
+ langgraph: 0.6.7
175
+ langchain-core: 0.3.76
176
+ llama-index-core: 0.14.2
177
+ pyautogen: 0.10.0
178
+ psutil: 7.1.0
179
+ ```
180
+
181
+ ## Use Case Recommendations
182
+
183
+ ### When to Choose LionAGI
184
+
185
+ - **Serverless/Lambda Functions**: 153.6ms cold start vs 340.9ms+ for
186
+ alternatives
187
+ - **Memory-Constrained Environments**: 54% lower memory footprint than nearest
188
+ competitor
189
+ - **High-Frequency Operations**: Consistent sub-180ms initialization across all
190
+ workloads
191
+ - **Cost-Sensitive Deployments**: Lower memory = more concurrent executions per
192
+ node
193
+
194
+ ### Framework Selection Guide
195
+
196
+ | Use Case | Recommended | Reasoning |
197
+ | --------------------- | ----------- | -------------------------------------- |
198
+ | Serverless/Lambda | LionAGI | Fastest cold start (153.6ms composite) |
199
+ | Memory-Limited | LionAGI | Lowest footprint (26.0MB) |
200
+ | State Machines | LangGraph | Purpose-built for graph workflows |
201
+ | Document RAG | LlamaIndex | Specialized document processing |
202
+ | Multi-Agent Chat | AutoGen | Conversation-focused patterns |
203
+ | Ecosystem Integration | LangChain | Extensive tool library |
204
+
205
+ ## Summary
206
+
207
+ The benchmarks show LionAGI's performance characteristics in cold-start
208
+ scenarios:
209
+
210
+ - **2.2× faster** cold-start performance vs next-best across composites (121.9%
211
+ advantage)
212
+ - Up to **3.3× faster** on realistic data-processing workloads
213
+ - **54% lower memory usage** (26.0MB vs 56.4MB for LangGraph)
214
+ - **Consistent performance** with tight P95 bounds and low variance
215
+ - **Sub-180ms orchestrator initialization** at 170.1ms median
216
+
217
+ These characteristics are relevant for:
218
+
219
+ - Serverless and edge deployments where cold-start performance impacts costs
220
+ - Applications with memory constraints or high concurrency requirements
221
+ - Use cases requiring predictable performance characteristics
222
+
223
+ ### Performance Evolution
224
+
225
+ **v0.18.1 Improvements** (Oct 2025 vs v0.17.7 Sept 2025):
226
+
227
+ - **47% faster** cold starts (238.8ms → 153.6ms composite)
228
+ - **37% lower memory** (41.2MB → 26.0MB RSS)
229
+ - **Doubled competitive advantage** (77.8% → 121.9% lead vs #2)
230
+
231
+ The v0.18.1 refactoring (removing ~10,000 LOC of unused code, simplifying type
232
+ system, consolidating architecture) delivered measurable performance gains while
233
+ improving code quality.
234
+
235
+ ---
236
+
237
+ ### Data Files
238
+
239
+ - **Summary**: `benchmark_summary_*.csv` - Statistical aggregates
240
+ - **Detailed**: `benchmark_detailed_*.csv` - Individual run data
241
+ - **Full Export**: `benchmark_results_*.json` - Complete metadata
242
+ - **Report**: `report.md` - Comprehensive analysis with full tables
243
+
244
+ _Last updated: October 15, 2025 • LionAGI v0.18.1 • Python 3.10.15_ _Benchmark
245
+ version: Apples-to-Apples Framework Benchmark v2.0_ _(composite excludes
246
+ imports; see Methodology)_