lionagi 0.16.1__tar.gz → 0.16.3__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 (365) hide show
  1. {lionagi-0.16.1 → lionagi-0.16.3}/.github/workflows/ci.yml +10 -4
  2. {lionagi-0.16.1 → lionagi-0.16.3}/PKG-INFO +3 -13
  3. {lionagi-0.16.1 → lionagi-0.16.3}/README.md +2 -2
  4. {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/baselines/concurrency-asyncio.json +1 -1
  5. {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/baselines/concurrency-trio.json +1 -1
  6. {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/baselines/fuzzy.json +1 -1
  7. {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/baselines/ln-asyncio.json +1 -1
  8. {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/baselines/ln-trio.json +1 -1
  9. {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/ln_bench.py +1 -1
  10. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/adapters/_utils.py +0 -14
  11. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/file/save.py +8 -1
  12. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/__init__.py +10 -0
  13. lionagi-0.16.3/lionagi/ln/_json_dump.py +348 -0
  14. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/fuzzy/__init__.py +4 -1
  15. lionagi-0.16.1/lionagi/libs/validate/fuzzy_validate_mapping.py → lionagi-0.16.3/lionagi/ln/fuzzy/_fuzzy_validate.py +49 -38
  16. lionagi-0.16.3/lionagi/ln/fuzzy/_to_dict.py +388 -0
  17. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/models/__init__.py +0 -2
  18. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/brainstorm/brainstorm.py +10 -10
  19. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/communicate/communicate.py +1 -1
  20. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/parse/parse.py +1 -1
  21. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/generic/element.py +5 -14
  22. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/generic/log.py +2 -2
  23. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/generic/pile.py +1 -1
  24. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/message.py +8 -1
  25. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/operatives/operative.py +2 -2
  26. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/endpoint.py +7 -0
  27. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/match_endpoint.py +2 -10
  28. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/types.py +1 -3
  29. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/hooks/hook_event.py +1 -1
  30. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/hooks/hook_registry.py +1 -1
  31. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/rate_limited_processor.py +1 -1
  32. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/session/branch.py +1 -101
  33. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/session/session.py +9 -14
  34. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/utils.py +3 -334
  35. lionagi-0.16.3/lionagi/version.py +1 -0
  36. {lionagi-0.16.1 → lionagi-0.16.3}/pyproject.toml +2 -17
  37. {lionagi-0.16.1 → lionagi-0.16.3}/uv.lock +7 -56
  38. lionagi-0.16.1/lionagi/adapters/postgres_model_adapter.py +0 -131
  39. lionagi-0.16.1/lionagi/libs/concurrency.py +0 -1
  40. lionagi-0.16.1/lionagi/libs/file/params.py +0 -175
  41. lionagi-0.16.1/lionagi/libs/nested/flatten.py +0 -172
  42. lionagi-0.16.1/lionagi/libs/nested/nfilter.py +0 -59
  43. lionagi-0.16.1/lionagi/libs/nested/nget.py +0 -45
  44. lionagi-0.16.1/lionagi/libs/nested/ninsert.py +0 -104
  45. lionagi-0.16.1/lionagi/libs/nested/nmerge.py +0 -158
  46. lionagi-0.16.1/lionagi/libs/nested/npop.py +0 -69
  47. lionagi-0.16.1/lionagi/libs/nested/nset.py +0 -94
  48. lionagi-0.16.1/lionagi/libs/nested/unflatten.py +0 -83
  49. lionagi-0.16.1/lionagi/libs/nested/utils.py +0 -189
  50. lionagi-0.16.1/lionagi/libs/parse.py +0 -31
  51. lionagi-0.16.1/lionagi/libs/schema/json_schema.py +0 -231
  52. lionagi-0.16.1/lionagi/libs/token_transform/base.py +0 -54
  53. lionagi-0.16.1/lionagi/libs/token_transform/llmlingua.py +0 -1
  54. lionagi-0.16.1/lionagi/libs/token_transform/perplexity.py +0 -450
  55. lionagi-0.16.1/lionagi/libs/token_transform/symbolic_compress_context.py +0 -152
  56. lionagi-0.16.1/lionagi/libs/token_transform/synthlang.py +0 -9
  57. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/base.py +0 -128
  58. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/abstract_algebra.toml +0 -11
  59. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/category_theory.toml +0 -11
  60. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/complex_analysis.toml +0 -11
  61. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/framework_options.json +0 -52
  62. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/group_theory.toml +0 -11
  63. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/math_logic.toml +0 -11
  64. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/reflective_patterns.toml +0 -11
  65. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/set_theory.toml +0 -11
  66. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/topology_fundamentals.toml +0 -11
  67. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/mapping/lion_emoji_mapping.toml +0 -61
  68. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/mapping/python_math_mapping.toml +0 -41
  69. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/mapping/rust_chinese_mapping.toml +0 -60
  70. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/utility/base_synthlang_system_prompt.toml +0 -11
  71. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/translate_to_synthlang.py +0 -140
  72. lionagi-0.16.1/lionagi/libs/token_transform/types.py +0 -15
  73. lionagi-0.16.1/lionagi/libs/unstructured/pdf_to_image.py +0 -45
  74. lionagi-0.16.1/lionagi/libs/unstructured/read_image_to_base64.py +0 -33
  75. lionagi-0.16.1/lionagi/libs/validate/fuzzy_match_keys.py +0 -7
  76. lionagi-0.16.1/lionagi/libs/validate/string_similarity.py +0 -7
  77. lionagi-0.16.1/lionagi/libs/validate/xml_parser.py +0 -203
  78. lionagi-0.16.1/lionagi/ln/_json_dump.py +0 -75
  79. lionagi-0.16.1/lionagi/ln/fuzzy/_fuzzy_validate.py +0 -46
  80. lionagi-0.16.1/lionagi/models/note.py +0 -383
  81. lionagi-0.16.1/lionagi/operations/communicate/__init__.py +0 -0
  82. lionagi-0.16.1/lionagi/operations/translate/__init__.py +0 -0
  83. lionagi-0.16.1/lionagi/operations/translate/translate.py +0 -47
  84. lionagi-0.16.1/lionagi/service/connections/providers/claude_code_.py +0 -294
  85. lionagi-0.16.1/lionagi/service/third_party/__init__.py +0 -0
  86. lionagi-0.16.1/lionagi/tools/file/__init__.py +0 -3
  87. lionagi-0.16.1/lionagi/tools/memory/tools.py +0 -495
  88. lionagi-0.16.1/lionagi/version.py +0 -1
  89. lionagi-0.16.1/scripts/concat.py +0 -95
  90. lionagi-0.16.1/scripts/config.py +0 -18
  91. {lionagi-0.16.1 → lionagi-0.16.3}/.coveragerc +0 -0
  92. {lionagi-0.16.1 → lionagi-0.16.3}/.env.example +0 -0
  93. {lionagi-0.16.1 → lionagi-0.16.3}/.github/FUNDING.yml +0 -0
  94. {lionagi-0.16.1 → lionagi-0.16.3}/.github/dependabot.yml +0 -0
  95. {lionagi-0.16.1 → lionagi-0.16.3}/.github/workflows/benchmarks.yml +0 -0
  96. {lionagi-0.16.1 → lionagi-0.16.3}/.github/workflows/codeql.yml +0 -0
  97. {lionagi-0.16.1 → lionagi-0.16.3}/.github/workflows/docs-deploy.yml +0 -0
  98. {lionagi-0.16.1 → lionagi-0.16.3}/.github/workflows/refresh-bench-baselines.yml +0 -0
  99. {lionagi-0.16.1 → lionagi-0.16.3}/.github/workflows/release.yml +0 -0
  100. {lionagi-0.16.1 → lionagi-0.16.3}/.gitignore +0 -0
  101. {lionagi-0.16.1 → lionagi-0.16.3}/.pre-commit-config.yaml +0 -0
  102. {lionagi-0.16.1 → lionagi-0.16.3}/.python-version +0 -0
  103. {lionagi-0.16.1 → lionagi-0.16.3}/CODE_OF_CONDUCT.md +0 -0
  104. {lionagi-0.16.1 → lionagi-0.16.3}/CONTRIBUTING.md +0 -0
  105. {lionagi-0.16.1 → lionagi-0.16.3}/LICENSE +0 -0
  106. {lionagi-0.16.1 → lionagi-0.16.3}/assets/operation_builder.gif +0 -0
  107. {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/README.md +0 -0
  108. {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/baselines/.gitkeep +0 -0
  109. {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/ci_compare.py +0 -0
  110. {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/concurrency_bench.py +0 -0
  111. {lionagi-0.16.1 → lionagi-0.16.3}/benchmarks/fuzzy_bench.py +0 -0
  112. {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/001_branch_converse.ipynb +0 -0
  113. {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/002_branch_interact.ipynb +0 -0
  114. {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/003_branch_info.ipynb +0 -0
  115. {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/004_conversation_patterns.ipynb +0 -0
  116. {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/005_react_basics.ipynb +0 -0
  117. {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/006_operation_graphs_claim_extraction.ipynb +0 -0
  118. {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/007_fan_out_in.py +0 -0
  119. {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/claude_proxy/README.md +0 -0
  120. {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/claude_proxy/claude_code_proxy.py +0 -0
  121. {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/claude_proxy/run_w_claude_code_proxy.ipynb +0 -0
  122. {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/data/002_comedian.json +0 -0
  123. {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/data/002_critic.json +0 -0
  124. {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/data/006_lion_proof_ch2.md +0 -0
  125. {lionagi-0.16.1 → lionagi-0.16.3}/cookbooks/using_claude_code.py +0 -0
  126. {lionagi-0.16.1 → lionagi-0.16.3}/docs/DOCUMENTATION_STANDARDS.md +0 -0
  127. {lionagi-0.16.1 → lionagi-0.16.3}/docs/advanced/custom-operations.md +0 -0
  128. {lionagi-0.16.1 → lionagi-0.16.3}/docs/advanced/error-handling.md +0 -0
  129. {lionagi-0.16.1 → lionagi-0.16.3}/docs/advanced/flow-composition.md +0 -0
  130. {lionagi-0.16.1 → lionagi-0.16.3}/docs/advanced/index.md +0 -0
  131. {lionagi-0.16.1 → lionagi-0.16.3}/docs/advanced/observability.md +0 -0
  132. {lionagi-0.16.1 → lionagi-0.16.3}/docs/advanced/performance.md +0 -0
  133. {lionagi-0.16.1 → lionagi-0.16.3}/docs/code-of-conduct.md +0 -0
  134. {lionagi-0.16.1 → lionagi-0.16.3}/docs/comparisons/langgraph.md +0 -0
  135. {lionagi-0.16.1 → lionagi-0.16.3}/docs/contributing.md +0 -0
  136. {lionagi-0.16.1 → lionagi-0.16.3}/docs/cookbook/brainstorming.md +0 -0
  137. {lionagi-0.16.1 → lionagi-0.16.3}/docs/cookbook/claim-extraction.md +0 -0
  138. {lionagi-0.16.1 → lionagi-0.16.3}/docs/cookbook/code-review-crew.md +0 -0
  139. {lionagi-0.16.1 → lionagi-0.16.3}/docs/cookbook/data-persistence.md +0 -0
  140. {lionagi-0.16.1 → lionagi-0.16.3}/docs/cookbook/hr-automation.md +0 -0
  141. {lionagi-0.16.1 → lionagi-0.16.3}/docs/cookbook/index.md +0 -0
  142. {lionagi-0.16.1 → lionagi-0.16.3}/docs/cookbook/research-synthesis.md +0 -0
  143. {lionagi-0.16.1 → lionagi-0.16.3}/docs/core-concepts/index.md +0 -0
  144. {lionagi-0.16.1 → lionagi-0.16.3}/docs/core-concepts/lionagi-philosophy.md +0 -0
  145. {lionagi-0.16.1 → lionagi-0.16.3}/docs/core-concepts/messages-and-memory.md +0 -0
  146. {lionagi-0.16.1 → lionagi-0.16.3}/docs/core-concepts/models-and-providers.md +0 -0
  147. {lionagi-0.16.1 → lionagi-0.16.3}/docs/core-concepts/operations.md +0 -0
  148. {lionagi-0.16.1 → lionagi-0.16.3}/docs/core-concepts/sessions-and-branches.md +0 -0
  149. {lionagi-0.16.1 → lionagi-0.16.3}/docs/core-concepts/tools-and-functions.md +0 -0
  150. {lionagi-0.16.1 → lionagi-0.16.3}/docs/for-ai-agents/claude-code-usage.md +0 -0
  151. {lionagi-0.16.1 → lionagi-0.16.3}/docs/for-ai-agents/index.md +0 -0
  152. {lionagi-0.16.1 → lionagi-0.16.3}/docs/for-ai-agents/orchestration-guide.md +0 -0
  153. {lionagi-0.16.1 → lionagi-0.16.3}/docs/for-ai-agents/pattern-selection.md +0 -0
  154. {lionagi-0.16.1 → lionagi-0.16.3}/docs/for-ai-agents/self-improvement.md +0 -0
  155. {lionagi-0.16.1 → lionagi-0.16.3}/docs/includes/abbreviations.md +0 -0
  156. {lionagi-0.16.1 → lionagi-0.16.3}/docs/index.md +0 -0
  157. {lionagi-0.16.1 → lionagi-0.16.3}/docs/integrations/databases.md +0 -0
  158. {lionagi-0.16.1 → lionagi-0.16.3}/docs/integrations/dspy-optimization.md +0 -0
  159. {lionagi-0.16.1 → lionagi-0.16.3}/docs/integrations/index.md +0 -0
  160. {lionagi-0.16.1 → lionagi-0.16.3}/docs/integrations/llamaindex-rag.md +0 -0
  161. {lionagi-0.16.1 → lionagi-0.16.3}/docs/integrations/llm-providers.md +0 -0
  162. {lionagi-0.16.1 → lionagi-0.16.3}/docs/integrations/mcp-servers.md +0 -0
  163. {lionagi-0.16.1 → lionagi-0.16.3}/docs/integrations/tools.md +0 -0
  164. {lionagi-0.16.1 → lionagi-0.16.3}/docs/integrations/vector-stores.md +0 -0
  165. {lionagi-0.16.1 → lionagi-0.16.3}/docs/marketing/language-interoperability-manifesto.md +0 -0
  166. {lionagi-0.16.1 → lionagi-0.16.3}/docs/migration/from-autogen.md +0 -0
  167. {lionagi-0.16.1 → lionagi-0.16.3}/docs/migration/from-crewai.md +0 -0
  168. {lionagi-0.16.1 → lionagi-0.16.3}/docs/migration/from-langchain.md +0 -0
  169. {lionagi-0.16.1 → lionagi-0.16.3}/docs/migration/index.md +0 -0
  170. {lionagi-0.16.1 → lionagi-0.16.3}/docs/patterns/conditional-flows.md +0 -0
  171. {lionagi-0.16.1 → lionagi-0.16.3}/docs/patterns/fan-out-in.md +0 -0
  172. {lionagi-0.16.1 → lionagi-0.16.3}/docs/patterns/index.md +0 -0
  173. {lionagi-0.16.1 → lionagi-0.16.3}/docs/patterns/react-with-rag.md +0 -0
  174. {lionagi-0.16.1 → lionagi-0.16.3}/docs/patterns/sequential-analysis.md +0 -0
  175. {lionagi-0.16.1 → lionagi-0.16.3}/docs/patterns/tournament-validation.md +0 -0
  176. {lionagi-0.16.1 → lionagi-0.16.3}/docs/problem-statement.md +0 -0
  177. {lionagi-0.16.1 → lionagi-0.16.3}/docs/quickstart/claude-code-integration.md +0 -0
  178. {lionagi-0.16.1 → lionagi-0.16.3}/docs/quickstart/index.md +0 -0
  179. {lionagi-0.16.1 → lionagi-0.16.3}/docs/quickstart/installation.md +0 -0
  180. {lionagi-0.16.1 → lionagi-0.16.3}/docs/quickstart/orchestration-first.md +0 -0
  181. {lionagi-0.16.1 → lionagi-0.16.3}/docs/quickstart/your-first-flow.md +0 -0
  182. {lionagi-0.16.1 → lionagi-0.16.3}/docs/reference/api/index.md +0 -0
  183. {lionagi-0.16.1 → lionagi-0.16.3}/docs/reference/changelog.md +0 -0
  184. {lionagi-0.16.1 → lionagi-0.16.3}/docs/reference/troubleshooting.md +0 -0
  185. {lionagi-0.16.1 → lionagi-0.16.3}/docs/stylesheets/extra.css +0 -0
  186. {lionagi-0.16.1 → lionagi-0.16.3}/docs/thinking-in-lionagi/branches-as-agents.md +0 -0
  187. {lionagi-0.16.1 → lionagi-0.16.3}/docs/thinking-in-lionagi/builder-pattern.md +0 -0
  188. {lionagi-0.16.1 → lionagi-0.16.3}/docs/thinking-in-lionagi/graphs-over-chains.md +0 -0
  189. {lionagi-0.16.1 → lionagi-0.16.3}/docs/thinking-in-lionagi/index.md +0 -0
  190. {lionagi-0.16.1 → lionagi-0.16.3}/docs/thinking-in-lionagi/why-lionagi.md +0 -0
  191. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/__init__.py +0 -0
  192. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/_class_registry.py +0 -0
  193. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/_errors.py +0 -0
  194. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/_types.py +0 -0
  195. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/adapters/__init__.py +0 -0
  196. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/adapters/async_postgres_adapter.py +0 -0
  197. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/config.py +0 -0
  198. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/fields/__init__.py +0 -0
  199. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/fields/action.py +0 -0
  200. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/fields/base.py +0 -0
  201. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/fields/code.py +0 -0
  202. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/fields/file.py +0 -0
  203. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/fields/instruct.py +0 -0
  204. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/fields/reason.py +0 -0
  205. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/fields/research.py +0 -0
  206. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/__init__.py +0 -0
  207. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/file/__init__.py +0 -0
  208. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/file/_utils.py +0 -0
  209. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/file/chunk.py +0 -0
  210. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/file/concat.py +0 -0
  211. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/file/concat_files.py +0 -0
  212. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/file/file_ops.py +0 -0
  213. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/file/process.py +0 -0
  214. {lionagi-0.16.1/lionagi/libs/nested → lionagi-0.16.3/lionagi/libs/schema}/__init__.py +0 -0
  215. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/schema/as_readable.py +0 -0
  216. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/schema/extract_code_block.py +0 -0
  217. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/schema/extract_docstring.py +0 -0
  218. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/schema/function_to_schema.py +0 -0
  219. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/schema/load_pydantic_model_from_schema.py +0 -0
  220. {lionagi-0.16.1/lionagi/libs/schema → lionagi-0.16.3/lionagi/libs/validate}/__init__.py +0 -0
  221. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/validate/common_field_validators.py +0 -0
  222. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/validate/to_num.py +0 -0
  223. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/libs/validate/validate_boolean.py +0 -0
  224. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/_async_call.py +0 -0
  225. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/_hash.py +0 -0
  226. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/_list_call.py +0 -0
  227. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/_to_list.py +0 -0
  228. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/_utils.py +0 -0
  229. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/__init__.py +0 -0
  230. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/_compat.py +0 -0
  231. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/cancel.py +0 -0
  232. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/errors.py +0 -0
  233. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/patterns.py +0 -0
  234. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/primitives.py +0 -0
  235. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/resource_tracker.py +0 -0
  236. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/task.py +0 -0
  237. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/throttle.py +0 -0
  238. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/concurrency/utils.py +0 -0
  239. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/fuzzy/_extract_json.py +0 -0
  240. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/fuzzy/_fuzzy_json.py +0 -0
  241. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/fuzzy/_fuzzy_match.py +0 -0
  242. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/fuzzy/_string_similarity.py +0 -0
  243. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/ln/types.py +0 -0
  244. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/models/field_model.py +0 -0
  245. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/models/hashable_model.py +0 -0
  246. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/models/model_params.py +0 -0
  247. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/models/operable_model.py +0 -0
  248. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/models/schema_model.py +0 -0
  249. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/ReAct/ReAct.py +0 -0
  250. {lionagi-0.16.1/lionagi/libs/validate → lionagi-0.16.3/lionagi/operations/ReAct}/__init__.py +0 -0
  251. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/ReAct/utils.py +0 -0
  252. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/__init__.py +0 -0
  253. {lionagi-0.16.1/lionagi/operations/ReAct → lionagi-0.16.3/lionagi/operations/_act}/__init__.py +0 -0
  254. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/_act/act.py +0 -0
  255. {lionagi-0.16.1/lionagi/operations/_act → lionagi-0.16.3/lionagi/operations/brainstorm}/__init__.py +0 -0
  256. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/brainstorm/prompt.py +0 -0
  257. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/builder.py +0 -0
  258. {lionagi-0.16.1/lionagi/operations/brainstorm → lionagi-0.16.3/lionagi/operations/chat}/__init__.py +0 -0
  259. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/chat/chat.py +0 -0
  260. {lionagi-0.16.1/lionagi/libs/token_transform → lionagi-0.16.3/lionagi/operations/communicate}/__init__.py +0 -0
  261. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/flow.py +0 -0
  262. {lionagi-0.16.1/lionagi/operations/chat → lionagi-0.16.3/lionagi/operations/instruct}/__init__.py +0 -0
  263. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/instruct/instruct.py +0 -0
  264. {lionagi-0.16.1/lionagi/operations/instruct → lionagi-0.16.3/lionagi/operations/interpret}/__init__.py +0 -0
  265. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/interpret/interpret.py +0 -0
  266. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/manager.py +0 -0
  267. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/node.py +0 -0
  268. {lionagi-0.16.1/lionagi/operations/interpret → lionagi-0.16.3/lionagi/operations/operate}/__init__.py +0 -0
  269. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/operate/operate.py +0 -0
  270. {lionagi-0.16.1/lionagi/operations/operate → lionagi-0.16.3/lionagi/operations/parse}/__init__.py +0 -0
  271. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/plan/__init__.py +0 -0
  272. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/plan/plan.py +0 -0
  273. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/plan/prompt.py +0 -0
  274. {lionagi-0.16.1/lionagi/operations/parse → lionagi-0.16.3/lionagi/operations/select}/__init__.py +0 -0
  275. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/select/select.py +0 -0
  276. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/select/utils.py +0 -0
  277. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/types.py +0 -0
  278. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/operations/utils.py +0 -0
  279. {lionagi-0.16.1/lionagi/operations/select → lionagi-0.16.3/lionagi/protocols}/__init__.py +0 -0
  280. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/_concepts.py +0 -0
  281. {lionagi-0.16.1/lionagi/protocols → lionagi-0.16.3/lionagi/protocols/action}/__init__.py +0 -0
  282. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/action/function_calling.py +0 -0
  283. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/action/manager.py +0 -0
  284. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/action/tool.py +0 -0
  285. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/contracts.py +0 -0
  286. {lionagi-0.16.1/lionagi/protocols/action → lionagi-0.16.3/lionagi/protocols/forms}/__init__.py +0 -0
  287. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/forms/base.py +0 -0
  288. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/forms/flow.py +0 -0
  289. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/forms/form.py +0 -0
  290. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/forms/report.py +0 -0
  291. {lionagi-0.16.1/lionagi/protocols/forms → lionagi-0.16.3/lionagi/protocols/generic}/__init__.py +0 -0
  292. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/generic/event.py +0 -0
  293. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/generic/processor.py +0 -0
  294. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/generic/progression.py +0 -0
  295. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/graph/__init__.py +0 -0
  296. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/graph/_utils.py +0 -0
  297. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/graph/edge.py +0 -0
  298. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/graph/graph.py +0 -0
  299. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/graph/node.py +0 -0
  300. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/ids.py +0 -0
  301. {lionagi-0.16.1/lionagi/protocols/generic → lionagi-0.16.3/lionagi/protocols/mail}/__init__.py +0 -0
  302. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/mail/exchange.py +0 -0
  303. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/mail/mail.py +0 -0
  304. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/mail/mailbox.py +0 -0
  305. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/mail/manager.py +0 -0
  306. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/mail/package.py +0 -0
  307. {lionagi-0.16.1/lionagi/protocols/mail → lionagi-0.16.3/lionagi/protocols/messages}/__init__.py +0 -0
  308. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/action_request.py +0 -0
  309. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/action_response.py +0 -0
  310. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/assistant_response.py +0 -0
  311. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/base.py +0 -0
  312. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/instruction.py +0 -0
  313. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/manager.py +0 -0
  314. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/system.py +0 -0
  315. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/templates/README.md +0 -0
  316. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
  317. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
  318. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
  319. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
  320. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
  321. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
  322. {lionagi-0.16.1/lionagi/protocols/messages → lionagi-0.16.3/lionagi/protocols/operatives}/__init__.py +0 -0
  323. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/operatives/step.py +0 -0
  324. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/protocols/types.py +0 -0
  325. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/py.typed +0 -0
  326. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/__init__.py +0 -0
  327. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/__init__.py +0 -0
  328. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/api_calling.py +0 -0
  329. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/endpoint_config.py +0 -0
  330. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/header_factory.py +0 -0
  331. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/__init__.py +0 -0
  332. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/anthropic_.py +0 -0
  333. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/claude_code_cli.py +0 -0
  334. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/exa_.py +0 -0
  335. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/nvidia_nim_.py +0 -0
  336. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/oai_.py +0 -0
  337. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/ollama_.py +0 -0
  338. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/connections/providers/perplexity_.py +0 -0
  339. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/hooks/__init__.py +0 -0
  340. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/hooks/_types.py +0 -0
  341. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/hooks/_utils.py +0 -0
  342. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/imodel.py +0 -0
  343. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/manager.py +0 -0
  344. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/resilience.py +0 -0
  345. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/third_party/README.md +0 -0
  346. {lionagi-0.16.1/lionagi/libs/unstructured → lionagi-0.16.3/lionagi/service/third_party}/__init__.py +0 -0
  347. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/third_party/anthropic_models.py +0 -0
  348. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/third_party/claude_code.py +0 -0
  349. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/third_party/exa_models.py +0 -0
  350. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/third_party/openai_model_names.py +0 -0
  351. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/third_party/pplx_models.py +0 -0
  352. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/token_calculator.py +0 -0
  353. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/service/types.py +0 -0
  354. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/session/__init__.py +0 -0
  355. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/session/prompts.py +0 -0
  356. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/settings.py +0 -0
  357. {lionagi-0.16.1/lionagi/protocols/operatives → lionagi-0.16.3/lionagi/tools}/__init__.py +0 -0
  358. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/tools/base.py +0 -0
  359. {lionagi-0.16.1/lionagi/tools → lionagi-0.16.3/lionagi/tools/file}/__init__.py +0 -0
  360. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/tools/file/reader.py +0 -0
  361. {lionagi-0.16.1 → lionagi-0.16.3}/lionagi/tools/types.py +0 -0
  362. {lionagi-0.16.1 → lionagi-0.16.3}/main.py +0 -0
  363. {lionagi-0.16.1 → lionagi-0.16.3}/mkdocs.yml +0 -0
  364. {lionagi-0.16.1 → lionagi-0.16.3}/scripts/README.md +0 -0
  365. {lionagi-0.16.1 → lionagi-0.16.3}/scripts/update_openai_models.py +0 -0
@@ -39,12 +39,18 @@ jobs:
39
39
  run: |
40
40
  uv venv
41
41
  uv sync --extra all
42
-
43
- - name: Run tests
42
+
43
+ - name: Run tests with coverage
44
44
  run: |
45
45
  source .venv/bin/activate
46
- uv run pytest --asyncio-mode=auto --maxfail=1 --disable-warnings tests/
47
-
46
+ uv run pytest --asyncio-mode=auto --maxfail=1 --disable-warnings --cov=lionagi --cov-report=xml --cov-report=term tests/
47
+
48
+ - name: Upload coverage reports to Codecov
49
+ uses: codecov/codecov-action@v5
50
+ with:
51
+ token: ${{ secrets.CODECOV_TOKEN }}
52
+ slug: khive-ai/lionagi
53
+
48
54
  - name: Check code style and compatibility
49
55
  run: |
50
56
  source .venv/bin/activate
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lionagi
3
- Version: 0.16.1
3
+ Version: 0.16.3
4
4
  Summary: An Intelligence Operating System.
5
5
  Author-email: HaiyangLi <quantocean.li@gmail.com>
6
6
  License: Apache License
@@ -226,17 +226,13 @@ Requires-Dist: backoff>=2.0.0
226
226
  Requires-Dist: jinja2>=3.0.0
227
227
  Requires-Dist: json-repair>=0.40.0
228
228
  Requires-Dist: msgspec>=0.18.0
229
- Requires-Dist: pillow>=10.0.0
230
- Requires-Dist: psutil>=6.0.0
231
229
  Requires-Dist: pydantic-settings>=2.8.0
232
230
  Requires-Dist: pydantic>=2.8.0
233
231
  Requires-Dist: pydapter[pandas]>=1.1.1
234
232
  Requires-Dist: python-dotenv>=1.1.0
235
233
  Requires-Dist: tiktoken>=0.9.0
236
- Requires-Dist: toml>=0.8.0
237
234
  Provides-Extra: all
238
235
  Requires-Dist: aiosqlite>=0.21.0; extra == 'all'
239
- Requires-Dist: claude-code-sdk>=0.0.15; extra == 'all'
240
236
  Requires-Dist: datamodel-code-generator>=0.31.2; extra == 'all'
241
237
  Requires-Dist: docling>=2.15.0; extra == 'all'
242
238
  Requires-Dist: fastmcp>=2.10.5; extra == 'all'
@@ -245,8 +241,6 @@ Requires-Dist: networkx>=3.0.0; extra == 'all'
245
241
  Requires-Dist: ollama>=0.4.0; extra == 'all'
246
242
  Requires-Dist: pydapter[postgres]; extra == 'all'
247
243
  Requires-Dist: rich>=13.0.0; extra == 'all'
248
- Provides-Extra: claude-code
249
- Requires-Dist: claude-code-sdk>=0.0.15; extra == 'claude-code'
250
244
  Provides-Extra: graph
251
245
  Requires-Dist: matplotlib>=3.7.0; extra == 'graph'
252
246
  Requires-Dist: networkx>=3.0.0; extra == 'graph'
@@ -264,10 +258,6 @@ Provides-Extra: schema
264
258
  Requires-Dist: datamodel-code-generator>=0.31.2; extra == 'schema'
265
259
  Provides-Extra: sqlite
266
260
  Requires-Dist: aiosqlite>=0.21.0; extra == 'sqlite'
267
- Provides-Extra: tools
268
- Requires-Dist: docling>=2.15.0; extra == 'tools'
269
- Provides-Extra: unstructured
270
- Requires-Dist: opencv-python>=4.2.0.34; extra == 'unstructured'
271
261
  Provides-Extra: xml
272
262
  Requires-Dist: xmltodict>=0.12.0; extra == 'xml'
273
263
  Description-Content-Type: text/markdown
@@ -275,6 +265,7 @@ Description-Content-Type: text/markdown
275
265
  ![PyPI - Version](https://img.shields.io/pypi/v/lionagi?labelColor=233476aa&color=231fc935)
276
266
  ![PyPI - Downloads](https://img.shields.io/pypi/dm/lionagi?color=blue)
277
267
  ![Python Version](https://img.shields.io/badge/python-3.10%2B-blue)
268
+ [![codecov](https://codecov.io/github/khive-ai/lionagi/graph/badge.svg?token=FAE47FY26T)](https://codecov.io/github/khive-ai/lionagi)
278
269
 
279
270
  [Documentation](https://khive-ai.github.io/lionagi/) |
280
271
  [Discord](https://discord.gg/JDj9ENhUE8) |
@@ -417,7 +408,7 @@ Seamlessly route to different models in the same workflow.
417
408
 
418
409
  ### Claude Code Integration
419
410
 
420
- LionAGI now supports Anthropic's Claude Code [Python SDK](https://github.com/anthropics/claude-code-sdk-python), and [CLI SDK](https://docs.anthropic.com/en/docs/claude-code/sdk) enabling autonomous coding capabilities with persistent session management. The CLI endpoint
411
+ LionAGI now supports Anthropic's Claude Code [CLI SDK](https://docs.anthropic.com/en/docs/claude-code/sdk) enabling autonomous coding capabilities with persistent session management. The CLI endpoint
421
412
  directly connects to claude code, and is recommended, you can either use it via a [proxy server](https://github.com/khive-ai/lionagi/tree/main/cookbooks/claude_proxy) or directly with `query_cli` endpoint, provided you have already logged onto claude code cli in your terminal.
422
413
 
423
414
  ```python
@@ -485,7 +476,6 @@ Key features:
485
476
  ```
486
477
  "lionagi[reader]" - Reader tool for any unstructured data and web pages
487
478
  "lionagi[ollama]" - Ollama model support for local inference
488
- "lionagi[claude-code]" - Claude code python SDK integration (cli endpoint does not require this)
489
479
  "lionagi[rich]" - Rich output formatting for better console display
490
480
  "lionagi[schema]" - Convert pydantic schema to make the Model class persistent
491
481
  "lionagi[postgres]" - Postgres database support for storing and retrieving structured data
@@ -1,6 +1,7 @@
1
1
  ![PyPI - Version](https://img.shields.io/pypi/v/lionagi?labelColor=233476aa&color=231fc935)
2
2
  ![PyPI - Downloads](https://img.shields.io/pypi/dm/lionagi?color=blue)
3
3
  ![Python Version](https://img.shields.io/badge/python-3.10%2B-blue)
4
+ [![codecov](https://codecov.io/github/khive-ai/lionagi/graph/badge.svg?token=FAE47FY26T)](https://codecov.io/github/khive-ai/lionagi)
4
5
 
5
6
  [Documentation](https://khive-ai.github.io/lionagi/) |
6
7
  [Discord](https://discord.gg/JDj9ENhUE8) |
@@ -143,7 +144,7 @@ Seamlessly route to different models in the same workflow.
143
144
 
144
145
  ### Claude Code Integration
145
146
 
146
- LionAGI now supports Anthropic's Claude Code [Python SDK](https://github.com/anthropics/claude-code-sdk-python), and [CLI SDK](https://docs.anthropic.com/en/docs/claude-code/sdk) enabling autonomous coding capabilities with persistent session management. The CLI endpoint
147
+ LionAGI now supports Anthropic's Claude Code [CLI SDK](https://docs.anthropic.com/en/docs/claude-code/sdk) enabling autonomous coding capabilities with persistent session management. The CLI endpoint
147
148
  directly connects to claude code, and is recommended, you can either use it via a [proxy server](https://github.com/khive-ai/lionagi/tree/main/cookbooks/claude_proxy) or directly with `query_cli` endpoint, provided you have already logged onto claude code cli in your terminal.
148
149
 
149
150
  ```python
@@ -211,7 +212,6 @@ Key features:
211
212
  ```
212
213
  "lionagi[reader]" - Reader tool for any unstructured data and web pages
213
214
  "lionagi[ollama]" - Ollama model support for local inference
214
- "lionagi[claude-code]" - Claude code python SDK integration (cli endpoint does not require this)
215
215
  "lionagi[rich]" - Rich output formatting for better console display
216
216
  "lionagi[schema]" - Convert pydantic schema to make the Model class persistent
217
217
  "lionagi[postgres]" - Postgres database support for storing and retrieving structured data
@@ -56,4 +56,4 @@
56
56
  "max": 0.09765000000001578
57
57
  }
58
58
  }
59
- }
59
+ }
@@ -56,4 +56,4 @@
56
56
  "max": 0.09094968200000153
57
57
  }
58
58
  }
59
- }
59
+ }
@@ -71,4 +71,4 @@
71
71
  "max": 0.0012660250000067208
72
72
  }
73
73
  }
74
- }
74
+ }
@@ -64,4 +64,4 @@
64
64
  "max": 0.0542278519999968
65
65
  }
66
66
  }
67
- }
67
+ }
@@ -64,4 +64,4 @@
64
64
  "max": 0.05512452299998927
65
65
  }
66
66
  }
67
- }
67
+ }
@@ -170,7 +170,7 @@ def scenario_json_dumps_medium_1000() -> (
170
170
  "flags": {"a": True, "b": False, "n": None},
171
171
  }
172
172
  for _ in range(1000):
173
- json_dumps(obj, False)
173
+ json_dumps(obj, decode=False)
174
174
 
175
175
  return _run
176
176
 
@@ -10,17 +10,3 @@ def check_async_postgres_available():
10
10
  "This adapter requires postgres option to be installed. "
11
11
  'Please install them using `uv pip install "lionagi[postgres]"`.'
12
12
  )
13
-
14
-
15
- def check_postgres_available():
16
- try:
17
- from pydapter.model_adapters.postgres_model import PostgresModelAdapter
18
- from sqlalchemy import String
19
- from sqlalchemy.orm import DeclarativeBase
20
-
21
- return True
22
- except Exception:
23
- return ImportError(
24
- "This adapter requires postgres option to be installed. "
25
- 'Please install them using `uv pip install "lionagi[postgres]"`.'
26
- )
@@ -89,7 +89,14 @@ def save_chunks(
89
89
  random_hash_digits=random_hash_digits,
90
90
  )
91
91
  save_to_file(
92
- ln.json_dumps(chunk),
92
+ ln.json_dumps(
93
+ chunk,
94
+ pretty=True,
95
+ sort_keys=True,
96
+ append_newline=True,
97
+ deterministic_sets=True,
98
+ decimal_as_float=True,
99
+ ),
93
100
  directory=file_path.parent,
94
101
  filename=file_path.name,
95
102
  verbose=verbose,
@@ -4,7 +4,10 @@ from ._json_dump import (
4
4
  DEFAULT_SERIALIZER,
5
5
  DEFAULT_SERIALIZER_OPTION,
6
6
  get_orjson_default,
7
+ json_dumpb,
7
8
  json_dumps,
9
+ json_lines_iter,
10
+ make_options,
8
11
  )
9
12
  from ._list_call import lcall
10
13
  from ._to_list import to_list
@@ -34,8 +37,10 @@ from .fuzzy import (
34
37
  extract_json,
35
38
  fuzzy_json,
36
39
  fuzzy_match_keys,
40
+ fuzzy_validate_mapping,
37
41
  fuzzy_validate_pydantic,
38
42
  string_similarity,
43
+ to_dict,
39
44
  )
40
45
  from .types import is_sentinel, not_sentinel
41
46
 
@@ -47,6 +52,9 @@ __all__ = (
47
52
  "DEFAULT_SERIALIZER_OPTION",
48
53
  "get_orjson_default",
49
54
  "json_dumps",
55
+ "make_options",
56
+ "json_dumpb",
57
+ "json_lines_iter",
50
58
  "lcall",
51
59
  "to_list",
52
60
  "acreate_path",
@@ -74,4 +82,6 @@ __all__ = (
74
82
  "string_similarity",
75
83
  "is_sentinel",
76
84
  "not_sentinel",
85
+ "to_dict",
86
+ "fuzzy_validate_mapping",
77
87
  )
@@ -0,0 +1,348 @@
1
+ from __future__ import annotations
2
+
3
+ import datetime as dt
4
+ import decimal
5
+ import re
6
+ from collections.abc import Callable, Iterable, Mapping
7
+ from enum import Enum
8
+ from functools import lru_cache
9
+ from pathlib import Path
10
+ from textwrap import shorten
11
+ from typing import Any
12
+ from uuid import UUID
13
+
14
+ import orjson
15
+
16
+ __all__ = [
17
+ "get_orjson_default",
18
+ "DEFAULT_SERIALIZER",
19
+ "DEFAULT_SERIALIZER_OPTION",
20
+ "make_options",
21
+ "json_dumpb",
22
+ "json_dumps",
23
+ "json_lines_iter",
24
+ ]
25
+
26
+ # Types orjson already serializes natively at C/Rust speed.
27
+ # (We only route them through default() when passthrough is requested.)
28
+ _NATIVE = (dt.datetime, dt.date, dt.time, UUID)
29
+
30
+ # --------- helpers ------------------------------------------------------------
31
+
32
+ _ADDR_PAT = re.compile(r" at 0x[0-9A-Fa-f]+")
33
+
34
+
35
+ def _clip(s: str, limit: int = 2048) -> str:
36
+ return shorten(s, width=limit, placeholder=f"...(+{len(s) - limit} chars)") # type: ignore[arg-type]
37
+
38
+
39
+ def _normalize_for_sorting(x: Any) -> str:
40
+ """Normalize repr/str to remove process-specific addresses."""
41
+ s = str(x)
42
+ return _ADDR_PAT.sub(" at 0x?", s)
43
+
44
+
45
+ def _stable_sorted_iterable(o: Iterable[Any]) -> list[Any]:
46
+ """
47
+ Deterministic ordering for sets (including mixed types).
48
+ Key: (class name, normalized str) avoids comparisons across unlike types
49
+ and removes memory address variance in default reprs.
50
+ """
51
+ return sorted(
52
+ o, key=lambda x: (x.__class__.__name__, _normalize_for_sorting(x))
53
+ )
54
+
55
+
56
+ def _safe_exception_payload(ex: Exception) -> dict[str, str]:
57
+ return {"type": ex.__class__.__name__, "message": str(ex)}
58
+
59
+
60
+ def _default_serializers(
61
+ deterministic_sets: bool,
62
+ decimal_as_float: bool,
63
+ enum_as_name: bool,
64
+ passthrough_datetime: bool,
65
+ ) -> dict[type, Callable[[Any], Any]]:
66
+ ser: dict[type, Callable[[Any], Any]] = {
67
+ Path: str,
68
+ decimal.Decimal: (float if decimal_as_float else str),
69
+ set: (_stable_sorted_iterable if deterministic_sets else list),
70
+ frozenset: (_stable_sorted_iterable if deterministic_sets else list),
71
+ }
72
+ if enum_as_name:
73
+ ser[Enum] = lambda e: e.name
74
+ # Only needed if you also set OPT_PASSTHROUGH_DATETIME via options.
75
+ if passthrough_datetime:
76
+ ser[dt.datetime] = lambda o: o.isoformat()
77
+ return ser
78
+
79
+
80
+ # --------- default() factory --------------------------------------------------
81
+
82
+
83
+ def get_orjson_default(
84
+ *,
85
+ order: list[type] | None = None,
86
+ additional: Mapping[type, Callable[[Any], Any]] | None = None,
87
+ extend_default: bool = True,
88
+ deterministic_sets: bool = False,
89
+ decimal_as_float: bool = False,
90
+ enum_as_name: bool = False,
91
+ passthrough_datetime: bool = False,
92
+ safe_fallback: bool = False,
93
+ fallback_clip: int = 2048,
94
+ ) -> Callable[[Any], Any]:
95
+ """
96
+ Build a fast, extensible `default=` callable for orjson.dumps.
97
+
98
+ - deterministic_sets: sort set/frozenset deterministically (slower).
99
+ - decimal_as_float: serialize Decimal as float (faster/smaller; precision loss).
100
+ - enum_as_name: serialize Enum as .name (else orjson uses .value by default).
101
+ - passthrough_datetime: if True, also pass OPT_PASSTHROUGH_DATETIME in options.
102
+ - safe_fallback: if True, unknown objects never raise (for logs);
103
+ Exceptions become a tiny dict; all else becomes clipped repr(str).
104
+
105
+ 'order' and 'additional' preserve your override semantics.
106
+ """
107
+ ser = _default_serializers(
108
+ deterministic_sets=deterministic_sets,
109
+ decimal_as_float=decimal_as_float,
110
+ enum_as_name=enum_as_name,
111
+ passthrough_datetime=passthrough_datetime,
112
+ )
113
+ if additional:
114
+ ser.update(additional)
115
+
116
+ base_order: list[type] = [Path, decimal.Decimal, set, frozenset]
117
+ if enum_as_name:
118
+ base_order.insert(0, Enum)
119
+ if passthrough_datetime:
120
+ base_order.insert(0, dt.datetime)
121
+
122
+ if order:
123
+ order_ = (
124
+ (base_order + [t for t in order if t not in base_order])
125
+ if extend_default
126
+ else list(order)
127
+ )
128
+ else:
129
+ order_ = base_order.copy()
130
+
131
+ if not passthrough_datetime:
132
+ # Avoid checks for types already on the orjson native fast path.
133
+ order_ = [t for t in order_ if t not in _NATIVE]
134
+
135
+ order_tuple = tuple(order_)
136
+ cache: dict[type, Callable[[Any], Any]] = {}
137
+
138
+ def default(obj: Any) -> Any:
139
+ typ = obj.__class__
140
+ func = cache.get(typ)
141
+ if func is None:
142
+ for T in order_tuple:
143
+ if issubclass(typ, T):
144
+ f = ser.get(T)
145
+ if f:
146
+ cache[typ] = f
147
+ func = f
148
+ break
149
+ else:
150
+ # Duck-typed support for common data holders
151
+ md = getattr(obj, "model_dump", None)
152
+ if callable(md):
153
+ try:
154
+ return md()
155
+ except Exception:
156
+ pass
157
+ dd = getattr(obj, "dict", None)
158
+ if callable(dd):
159
+ try:
160
+ return dd()
161
+ except Exception:
162
+ pass
163
+ if safe_fallback:
164
+ if isinstance(obj, Exception):
165
+ return _safe_exception_payload(obj)
166
+ return _clip(repr(obj), fallback_clip)
167
+ raise TypeError(
168
+ f"Type is not JSON serializable: {typ.__name__}"
169
+ )
170
+ return func(obj)
171
+
172
+ return default
173
+
174
+
175
+ @lru_cache(maxsize=128)
176
+ def _cached_default(
177
+ deterministic_sets: bool,
178
+ decimal_as_float: bool,
179
+ enum_as_name: bool,
180
+ passthrough_datetime: bool,
181
+ safe_fallback: bool,
182
+ fallback_clip: int,
183
+ ):
184
+ return get_orjson_default(
185
+ deterministic_sets=deterministic_sets,
186
+ decimal_as_float=decimal_as_float,
187
+ enum_as_name=enum_as_name,
188
+ passthrough_datetime=passthrough_datetime,
189
+ safe_fallback=safe_fallback,
190
+ fallback_clip=fallback_clip,
191
+ )
192
+
193
+
194
+ # --------- defaults & options -------------------------------------------------
195
+
196
+ # Compact, no newline, no sorting: neutral default for most use-cases.
197
+ DEFAULT_SERIALIZER_OPTION = 0
198
+ DEFAULT_SERIALIZER = get_orjson_default()
199
+
200
+
201
+ def make_options(
202
+ *,
203
+ pretty: bool = False,
204
+ sort_keys: bool = False,
205
+ naive_utc: bool = False,
206
+ utc_z: bool = False,
207
+ append_newline: bool = False,
208
+ passthrough_datetime: bool = False,
209
+ allow_non_str_keys: bool = False,
210
+ ) -> int:
211
+ """
212
+ Compose orjson 'option' bit flags succinctly.
213
+ """
214
+ opt = 0
215
+ if append_newline:
216
+ opt |= orjson.OPT_APPEND_NEWLINE
217
+ if pretty:
218
+ opt |= orjson.OPT_INDENT_2
219
+ if sort_keys:
220
+ opt |= orjson.OPT_SORT_KEYS
221
+ if naive_utc:
222
+ opt |= orjson.OPT_NAIVE_UTC
223
+ if utc_z:
224
+ opt |= orjson.OPT_UTC_Z
225
+ if passthrough_datetime:
226
+ opt |= orjson.OPT_PASSTHROUGH_DATETIME
227
+ if allow_non_str_keys:
228
+ opt |= orjson.OPT_NON_STR_KEYS
229
+ return opt
230
+
231
+
232
+ # --------- dump helpers -------------------------------------------------------
233
+
234
+
235
+ def json_dumpb(
236
+ obj: Any,
237
+ *,
238
+ pretty: bool = False,
239
+ sort_keys: bool = False,
240
+ naive_utc: bool = False,
241
+ utc_z: bool = False,
242
+ append_newline: bool = False,
243
+ allow_non_str_keys: bool = False,
244
+ deterministic_sets: bool = False,
245
+ decimal_as_float: bool = False,
246
+ enum_as_name: bool = False,
247
+ passthrough_datetime: bool = False,
248
+ safe_fallback: bool = False,
249
+ fallback_clip: int = 2048,
250
+ default: Callable[[Any], Any] | None = None,
251
+ options: int | None = None,
252
+ ) -> bytes:
253
+ """
254
+ Serialize to **bytes** (fast path). Prefer this in hot code.
255
+
256
+ Notes:
257
+ - If you set passthrough_datetime=True, you likely also want it in options.
258
+ - safe_fallback=True is recommended for LOGGING ONLY.
259
+ """
260
+ if default is None:
261
+ default = _cached_default(
262
+ deterministic_sets=deterministic_sets,
263
+ decimal_as_float=decimal_as_float,
264
+ enum_as_name=enum_as_name,
265
+ passthrough_datetime=passthrough_datetime,
266
+ safe_fallback=safe_fallback,
267
+ fallback_clip=fallback_clip,
268
+ )
269
+ opt = (
270
+ options
271
+ if options is not None
272
+ else make_options(
273
+ pretty=pretty,
274
+ sort_keys=sort_keys,
275
+ naive_utc=naive_utc,
276
+ utc_z=utc_z,
277
+ append_newline=append_newline,
278
+ passthrough_datetime=passthrough_datetime,
279
+ allow_non_str_keys=allow_non_str_keys,
280
+ )
281
+ )
282
+ return orjson.dumps(obj, default=default, option=opt)
283
+
284
+
285
+ def json_dumps(
286
+ obj: Any,
287
+ /,
288
+ *,
289
+ decode: bool = True,
290
+ **kwargs: Any,
291
+ ) -> str | bytes:
292
+ """
293
+ Serialize to str by default (decode=True), or bytes if decode=False.
294
+ """
295
+ out = json_dumpb(obj, **kwargs)
296
+ return out.decode("utf-8") if decode else out
297
+
298
+
299
+ # --------- streaming for very large outputs ----------------------------------
300
+
301
+
302
+ def json_lines_iter(
303
+ it: Iterable[Any],
304
+ *,
305
+ # default() configuration for each line
306
+ deterministic_sets: bool = False,
307
+ decimal_as_float: bool = False,
308
+ enum_as_name: bool = False,
309
+ passthrough_datetime: bool = False,
310
+ safe_fallback: bool = False,
311
+ fallback_clip: int = 2048,
312
+ # options
313
+ naive_utc: bool = False,
314
+ utc_z: bool = False,
315
+ allow_non_str_keys: bool = False,
316
+ # advanced
317
+ default: Callable[[Any], Any] | None = None,
318
+ options: int | None = None,
319
+ ) -> Iterable[bytes]:
320
+ """
321
+ Stream an iterable as **NDJSON** (one JSON object per line) in **bytes**.
322
+
323
+ Always ensures a trailing newline per line (OPT_APPEND_NEWLINE).
324
+ """
325
+ if default is None:
326
+ default = _cached_default(
327
+ deterministic_sets=deterministic_sets,
328
+ decimal_as_float=decimal_as_float,
329
+ enum_as_name=enum_as_name,
330
+ passthrough_datetime=passthrough_datetime,
331
+ safe_fallback=safe_fallback,
332
+ fallback_clip=fallback_clip,
333
+ )
334
+ if options is None:
335
+ opt = make_options(
336
+ pretty=False,
337
+ sort_keys=False,
338
+ naive_utc=naive_utc,
339
+ utc_z=utc_z,
340
+ append_newline=True, # enforce newline for NDJSON
341
+ passthrough_datetime=passthrough_datetime,
342
+ allow_non_str_keys=allow_non_str_keys,
343
+ )
344
+ else:
345
+ opt = options | orjson.OPT_APPEND_NEWLINE
346
+
347
+ for item in it:
348
+ yield orjson.dumps(item, default=default, option=opt)
@@ -1,10 +1,12 @@
1
1
  from ._extract_json import extract_json
2
2
  from ._fuzzy_json import fuzzy_json
3
3
  from ._fuzzy_match import FuzzyMatchKeysParams, fuzzy_match_keys
4
- from ._fuzzy_validate import fuzzy_validate_pydantic
4
+ from ._fuzzy_validate import fuzzy_validate_mapping, fuzzy_validate_pydantic
5
5
  from ._string_similarity import SIMILARITY_TYPE, string_similarity
6
+ from ._to_dict import to_dict
6
7
 
7
8
  __all__ = (
9
+ "to_dict",
8
10
  "fuzzy_json",
9
11
  "fuzzy_match_keys",
10
12
  "extract_json",
@@ -12,4 +14,5 @@ __all__ = (
12
14
  "SIMILARITY_TYPE",
13
15
  "fuzzy_validate_pydantic",
14
16
  "FuzzyMatchKeysParams",
17
+ "fuzzy_validate_mapping",
15
18
  )