lionagi 0.16.1__tar.gz → 0.16.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 (364) hide show
  1. {lionagi-0.16.1 → lionagi-0.16.2}/PKG-INFO +1 -2
  2. {lionagi-0.16.1 → lionagi-0.16.2}/benchmarks/baselines/concurrency-asyncio.json +1 -1
  3. {lionagi-0.16.1 → lionagi-0.16.2}/benchmarks/baselines/concurrency-trio.json +1 -1
  4. {lionagi-0.16.1 → lionagi-0.16.2}/benchmarks/baselines/fuzzy.json +1 -1
  5. {lionagi-0.16.1 → lionagi-0.16.2}/benchmarks/baselines/ln-asyncio.json +1 -1
  6. {lionagi-0.16.1 → lionagi-0.16.2}/benchmarks/baselines/ln-trio.json +1 -1
  7. {lionagi-0.16.1 → lionagi-0.16.2}/benchmarks/ln_bench.py +1 -1
  8. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/file/save.py +8 -1
  9. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/__init__.py +6 -0
  10. lionagi-0.16.2/lionagi/ln/_json_dump.py +348 -0
  11. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/models/note.py +8 -4
  12. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/brainstorm/brainstorm.py +10 -10
  13. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/generic/element.py +5 -14
  14. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/generic/log.py +2 -2
  15. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/messages/message.py +8 -1
  16. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/connections/endpoint.py +7 -0
  17. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/connections/providers/claude_code_.py +6 -1
  18. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/session/branch.py +1 -101
  19. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/session/session.py +9 -14
  20. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/utils.py +2 -1
  21. lionagi-0.16.2/lionagi/version.py +1 -0
  22. {lionagi-0.16.1 → lionagi-0.16.2}/pyproject.toml +1 -2
  23. {lionagi-0.16.1 → lionagi-0.16.2}/uv.lock +6 -7
  24. lionagi-0.16.1/lionagi/libs/file/params.py +0 -175
  25. lionagi-0.16.1/lionagi/libs/token_transform/base.py +0 -54
  26. lionagi-0.16.1/lionagi/libs/token_transform/llmlingua.py +0 -1
  27. lionagi-0.16.1/lionagi/libs/token_transform/perplexity.py +0 -450
  28. lionagi-0.16.1/lionagi/libs/token_transform/symbolic_compress_context.py +0 -152
  29. lionagi-0.16.1/lionagi/libs/token_transform/synthlang.py +0 -9
  30. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/base.py +0 -128
  31. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/abstract_algebra.toml +0 -11
  32. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/category_theory.toml +0 -11
  33. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/complex_analysis.toml +0 -11
  34. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/framework_options.json +0 -52
  35. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/group_theory.toml +0 -11
  36. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/math_logic.toml +0 -11
  37. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/reflective_patterns.toml +0 -11
  38. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/set_theory.toml +0 -11
  39. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/frameworks/topology_fundamentals.toml +0 -11
  40. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/mapping/lion_emoji_mapping.toml +0 -61
  41. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/mapping/python_math_mapping.toml +0 -41
  42. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/mapping/rust_chinese_mapping.toml +0 -60
  43. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/resources/utility/base_synthlang_system_prompt.toml +0 -11
  44. lionagi-0.16.1/lionagi/libs/token_transform/synthlang_/translate_to_synthlang.py +0 -140
  45. lionagi-0.16.1/lionagi/libs/token_transform/types.py +0 -15
  46. lionagi-0.16.1/lionagi/ln/_json_dump.py +0 -75
  47. lionagi-0.16.1/lionagi/operations/translate/__init__.py +0 -0
  48. lionagi-0.16.1/lionagi/operations/translate/translate.py +0 -47
  49. lionagi-0.16.1/lionagi/service/third_party/__init__.py +0 -0
  50. lionagi-0.16.1/lionagi/tools/memory/tools.py +0 -495
  51. lionagi-0.16.1/lionagi/version.py +0 -1
  52. lionagi-0.16.1/scripts/concat.py +0 -95
  53. lionagi-0.16.1/scripts/config.py +0 -18
  54. {lionagi-0.16.1 → lionagi-0.16.2}/.coveragerc +0 -0
  55. {lionagi-0.16.1 → lionagi-0.16.2}/.env.example +0 -0
  56. {lionagi-0.16.1 → lionagi-0.16.2}/.github/FUNDING.yml +0 -0
  57. {lionagi-0.16.1 → lionagi-0.16.2}/.github/dependabot.yml +0 -0
  58. {lionagi-0.16.1 → lionagi-0.16.2}/.github/workflows/benchmarks.yml +0 -0
  59. {lionagi-0.16.1 → lionagi-0.16.2}/.github/workflows/ci.yml +0 -0
  60. {lionagi-0.16.1 → lionagi-0.16.2}/.github/workflows/codeql.yml +0 -0
  61. {lionagi-0.16.1 → lionagi-0.16.2}/.github/workflows/docs-deploy.yml +0 -0
  62. {lionagi-0.16.1 → lionagi-0.16.2}/.github/workflows/refresh-bench-baselines.yml +0 -0
  63. {lionagi-0.16.1 → lionagi-0.16.2}/.github/workflows/release.yml +0 -0
  64. {lionagi-0.16.1 → lionagi-0.16.2}/.gitignore +0 -0
  65. {lionagi-0.16.1 → lionagi-0.16.2}/.pre-commit-config.yaml +0 -0
  66. {lionagi-0.16.1 → lionagi-0.16.2}/.python-version +0 -0
  67. {lionagi-0.16.1 → lionagi-0.16.2}/CODE_OF_CONDUCT.md +0 -0
  68. {lionagi-0.16.1 → lionagi-0.16.2}/CONTRIBUTING.md +0 -0
  69. {lionagi-0.16.1 → lionagi-0.16.2}/LICENSE +0 -0
  70. {lionagi-0.16.1 → lionagi-0.16.2}/README.md +0 -0
  71. {lionagi-0.16.1 → lionagi-0.16.2}/assets/operation_builder.gif +0 -0
  72. {lionagi-0.16.1 → lionagi-0.16.2}/benchmarks/README.md +0 -0
  73. {lionagi-0.16.1 → lionagi-0.16.2}/benchmarks/baselines/.gitkeep +0 -0
  74. {lionagi-0.16.1 → lionagi-0.16.2}/benchmarks/ci_compare.py +0 -0
  75. {lionagi-0.16.1 → lionagi-0.16.2}/benchmarks/concurrency_bench.py +0 -0
  76. {lionagi-0.16.1 → lionagi-0.16.2}/benchmarks/fuzzy_bench.py +0 -0
  77. {lionagi-0.16.1 → lionagi-0.16.2}/cookbooks/001_branch_converse.ipynb +0 -0
  78. {lionagi-0.16.1 → lionagi-0.16.2}/cookbooks/002_branch_interact.ipynb +0 -0
  79. {lionagi-0.16.1 → lionagi-0.16.2}/cookbooks/003_branch_info.ipynb +0 -0
  80. {lionagi-0.16.1 → lionagi-0.16.2}/cookbooks/004_conversation_patterns.ipynb +0 -0
  81. {lionagi-0.16.1 → lionagi-0.16.2}/cookbooks/005_react_basics.ipynb +0 -0
  82. {lionagi-0.16.1 → lionagi-0.16.2}/cookbooks/006_operation_graphs_claim_extraction.ipynb +0 -0
  83. {lionagi-0.16.1 → lionagi-0.16.2}/cookbooks/007_fan_out_in.py +0 -0
  84. {lionagi-0.16.1 → lionagi-0.16.2}/cookbooks/claude_proxy/README.md +0 -0
  85. {lionagi-0.16.1 → lionagi-0.16.2}/cookbooks/claude_proxy/claude_code_proxy.py +0 -0
  86. {lionagi-0.16.1 → lionagi-0.16.2}/cookbooks/claude_proxy/run_w_claude_code_proxy.ipynb +0 -0
  87. {lionagi-0.16.1 → lionagi-0.16.2}/cookbooks/data/002_comedian.json +0 -0
  88. {lionagi-0.16.1 → lionagi-0.16.2}/cookbooks/data/002_critic.json +0 -0
  89. {lionagi-0.16.1 → lionagi-0.16.2}/cookbooks/data/006_lion_proof_ch2.md +0 -0
  90. {lionagi-0.16.1 → lionagi-0.16.2}/cookbooks/using_claude_code.py +0 -0
  91. {lionagi-0.16.1 → lionagi-0.16.2}/docs/DOCUMENTATION_STANDARDS.md +0 -0
  92. {lionagi-0.16.1 → lionagi-0.16.2}/docs/advanced/custom-operations.md +0 -0
  93. {lionagi-0.16.1 → lionagi-0.16.2}/docs/advanced/error-handling.md +0 -0
  94. {lionagi-0.16.1 → lionagi-0.16.2}/docs/advanced/flow-composition.md +0 -0
  95. {lionagi-0.16.1 → lionagi-0.16.2}/docs/advanced/index.md +0 -0
  96. {lionagi-0.16.1 → lionagi-0.16.2}/docs/advanced/observability.md +0 -0
  97. {lionagi-0.16.1 → lionagi-0.16.2}/docs/advanced/performance.md +0 -0
  98. {lionagi-0.16.1 → lionagi-0.16.2}/docs/code-of-conduct.md +0 -0
  99. {lionagi-0.16.1 → lionagi-0.16.2}/docs/comparisons/langgraph.md +0 -0
  100. {lionagi-0.16.1 → lionagi-0.16.2}/docs/contributing.md +0 -0
  101. {lionagi-0.16.1 → lionagi-0.16.2}/docs/cookbook/brainstorming.md +0 -0
  102. {lionagi-0.16.1 → lionagi-0.16.2}/docs/cookbook/claim-extraction.md +0 -0
  103. {lionagi-0.16.1 → lionagi-0.16.2}/docs/cookbook/code-review-crew.md +0 -0
  104. {lionagi-0.16.1 → lionagi-0.16.2}/docs/cookbook/data-persistence.md +0 -0
  105. {lionagi-0.16.1 → lionagi-0.16.2}/docs/cookbook/hr-automation.md +0 -0
  106. {lionagi-0.16.1 → lionagi-0.16.2}/docs/cookbook/index.md +0 -0
  107. {lionagi-0.16.1 → lionagi-0.16.2}/docs/cookbook/research-synthesis.md +0 -0
  108. {lionagi-0.16.1 → lionagi-0.16.2}/docs/core-concepts/index.md +0 -0
  109. {lionagi-0.16.1 → lionagi-0.16.2}/docs/core-concepts/lionagi-philosophy.md +0 -0
  110. {lionagi-0.16.1 → lionagi-0.16.2}/docs/core-concepts/messages-and-memory.md +0 -0
  111. {lionagi-0.16.1 → lionagi-0.16.2}/docs/core-concepts/models-and-providers.md +0 -0
  112. {lionagi-0.16.1 → lionagi-0.16.2}/docs/core-concepts/operations.md +0 -0
  113. {lionagi-0.16.1 → lionagi-0.16.2}/docs/core-concepts/sessions-and-branches.md +0 -0
  114. {lionagi-0.16.1 → lionagi-0.16.2}/docs/core-concepts/tools-and-functions.md +0 -0
  115. {lionagi-0.16.1 → lionagi-0.16.2}/docs/for-ai-agents/claude-code-usage.md +0 -0
  116. {lionagi-0.16.1 → lionagi-0.16.2}/docs/for-ai-agents/index.md +0 -0
  117. {lionagi-0.16.1 → lionagi-0.16.2}/docs/for-ai-agents/orchestration-guide.md +0 -0
  118. {lionagi-0.16.1 → lionagi-0.16.2}/docs/for-ai-agents/pattern-selection.md +0 -0
  119. {lionagi-0.16.1 → lionagi-0.16.2}/docs/for-ai-agents/self-improvement.md +0 -0
  120. {lionagi-0.16.1 → lionagi-0.16.2}/docs/includes/abbreviations.md +0 -0
  121. {lionagi-0.16.1 → lionagi-0.16.2}/docs/index.md +0 -0
  122. {lionagi-0.16.1 → lionagi-0.16.2}/docs/integrations/databases.md +0 -0
  123. {lionagi-0.16.1 → lionagi-0.16.2}/docs/integrations/dspy-optimization.md +0 -0
  124. {lionagi-0.16.1 → lionagi-0.16.2}/docs/integrations/index.md +0 -0
  125. {lionagi-0.16.1 → lionagi-0.16.2}/docs/integrations/llamaindex-rag.md +0 -0
  126. {lionagi-0.16.1 → lionagi-0.16.2}/docs/integrations/llm-providers.md +0 -0
  127. {lionagi-0.16.1 → lionagi-0.16.2}/docs/integrations/mcp-servers.md +0 -0
  128. {lionagi-0.16.1 → lionagi-0.16.2}/docs/integrations/tools.md +0 -0
  129. {lionagi-0.16.1 → lionagi-0.16.2}/docs/integrations/vector-stores.md +0 -0
  130. {lionagi-0.16.1 → lionagi-0.16.2}/docs/marketing/language-interoperability-manifesto.md +0 -0
  131. {lionagi-0.16.1 → lionagi-0.16.2}/docs/migration/from-autogen.md +0 -0
  132. {lionagi-0.16.1 → lionagi-0.16.2}/docs/migration/from-crewai.md +0 -0
  133. {lionagi-0.16.1 → lionagi-0.16.2}/docs/migration/from-langchain.md +0 -0
  134. {lionagi-0.16.1 → lionagi-0.16.2}/docs/migration/index.md +0 -0
  135. {lionagi-0.16.1 → lionagi-0.16.2}/docs/patterns/conditional-flows.md +0 -0
  136. {lionagi-0.16.1 → lionagi-0.16.2}/docs/patterns/fan-out-in.md +0 -0
  137. {lionagi-0.16.1 → lionagi-0.16.2}/docs/patterns/index.md +0 -0
  138. {lionagi-0.16.1 → lionagi-0.16.2}/docs/patterns/react-with-rag.md +0 -0
  139. {lionagi-0.16.1 → lionagi-0.16.2}/docs/patterns/sequential-analysis.md +0 -0
  140. {lionagi-0.16.1 → lionagi-0.16.2}/docs/patterns/tournament-validation.md +0 -0
  141. {lionagi-0.16.1 → lionagi-0.16.2}/docs/problem-statement.md +0 -0
  142. {lionagi-0.16.1 → lionagi-0.16.2}/docs/quickstart/claude-code-integration.md +0 -0
  143. {lionagi-0.16.1 → lionagi-0.16.2}/docs/quickstart/index.md +0 -0
  144. {lionagi-0.16.1 → lionagi-0.16.2}/docs/quickstart/installation.md +0 -0
  145. {lionagi-0.16.1 → lionagi-0.16.2}/docs/quickstart/orchestration-first.md +0 -0
  146. {lionagi-0.16.1 → lionagi-0.16.2}/docs/quickstart/your-first-flow.md +0 -0
  147. {lionagi-0.16.1 → lionagi-0.16.2}/docs/reference/api/index.md +0 -0
  148. {lionagi-0.16.1 → lionagi-0.16.2}/docs/reference/changelog.md +0 -0
  149. {lionagi-0.16.1 → lionagi-0.16.2}/docs/reference/troubleshooting.md +0 -0
  150. {lionagi-0.16.1 → lionagi-0.16.2}/docs/stylesheets/extra.css +0 -0
  151. {lionagi-0.16.1 → lionagi-0.16.2}/docs/thinking-in-lionagi/branches-as-agents.md +0 -0
  152. {lionagi-0.16.1 → lionagi-0.16.2}/docs/thinking-in-lionagi/builder-pattern.md +0 -0
  153. {lionagi-0.16.1 → lionagi-0.16.2}/docs/thinking-in-lionagi/graphs-over-chains.md +0 -0
  154. {lionagi-0.16.1 → lionagi-0.16.2}/docs/thinking-in-lionagi/index.md +0 -0
  155. {lionagi-0.16.1 → lionagi-0.16.2}/docs/thinking-in-lionagi/why-lionagi.md +0 -0
  156. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/__init__.py +0 -0
  157. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/_class_registry.py +0 -0
  158. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/_errors.py +0 -0
  159. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/_types.py +0 -0
  160. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/adapters/__init__.py +0 -0
  161. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/adapters/_utils.py +0 -0
  162. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/adapters/async_postgres_adapter.py +0 -0
  163. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/adapters/postgres_model_adapter.py +0 -0
  164. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/config.py +0 -0
  165. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/fields/__init__.py +0 -0
  166. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/fields/action.py +0 -0
  167. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/fields/base.py +0 -0
  168. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/fields/code.py +0 -0
  169. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/fields/file.py +0 -0
  170. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/fields/instruct.py +0 -0
  171. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/fields/reason.py +0 -0
  172. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/fields/research.py +0 -0
  173. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/__init__.py +0 -0
  174. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/concurrency.py +0 -0
  175. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/file/__init__.py +0 -0
  176. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/file/_utils.py +0 -0
  177. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/file/chunk.py +0 -0
  178. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/file/concat.py +0 -0
  179. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/file/concat_files.py +0 -0
  180. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/file/file_ops.py +0 -0
  181. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/file/process.py +0 -0
  182. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/nested/__init__.py +0 -0
  183. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/nested/flatten.py +0 -0
  184. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/nested/nfilter.py +0 -0
  185. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/nested/nget.py +0 -0
  186. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/nested/ninsert.py +0 -0
  187. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/nested/nmerge.py +0 -0
  188. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/nested/npop.py +0 -0
  189. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/nested/nset.py +0 -0
  190. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/nested/unflatten.py +0 -0
  191. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/nested/utils.py +0 -0
  192. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/parse.py +0 -0
  193. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/schema/__init__.py +0 -0
  194. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/schema/as_readable.py +0 -0
  195. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/schema/extract_code_block.py +0 -0
  196. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/schema/extract_docstring.py +0 -0
  197. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/schema/function_to_schema.py +0 -0
  198. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/schema/json_schema.py +0 -0
  199. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/schema/load_pydantic_model_from_schema.py +0 -0
  200. {lionagi-0.16.1/lionagi/libs/token_transform → lionagi-0.16.2/lionagi/libs/unstructured}/__init__.py +0 -0
  201. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/unstructured/pdf_to_image.py +0 -0
  202. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/unstructured/read_image_to_base64.py +0 -0
  203. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/validate/__init__.py +0 -0
  204. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/validate/common_field_validators.py +0 -0
  205. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/validate/fuzzy_match_keys.py +0 -0
  206. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/validate/fuzzy_validate_mapping.py +0 -0
  207. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/validate/string_similarity.py +0 -0
  208. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/validate/to_num.py +0 -0
  209. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/validate/validate_boolean.py +0 -0
  210. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/libs/validate/xml_parser.py +0 -0
  211. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/_async_call.py +0 -0
  212. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/_hash.py +0 -0
  213. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/_list_call.py +0 -0
  214. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/_to_list.py +0 -0
  215. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/_utils.py +0 -0
  216. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/concurrency/__init__.py +0 -0
  217. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/concurrency/_compat.py +0 -0
  218. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/concurrency/cancel.py +0 -0
  219. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/concurrency/errors.py +0 -0
  220. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/concurrency/patterns.py +0 -0
  221. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/concurrency/primitives.py +0 -0
  222. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/concurrency/resource_tracker.py +0 -0
  223. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/concurrency/task.py +0 -0
  224. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/concurrency/throttle.py +0 -0
  225. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/concurrency/utils.py +0 -0
  226. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/fuzzy/__init__.py +0 -0
  227. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/fuzzy/_extract_json.py +0 -0
  228. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/fuzzy/_fuzzy_json.py +0 -0
  229. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/fuzzy/_fuzzy_match.py +0 -0
  230. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/fuzzy/_fuzzy_validate.py +0 -0
  231. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/fuzzy/_string_similarity.py +0 -0
  232. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/ln/types.py +0 -0
  233. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/models/__init__.py +0 -0
  234. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/models/field_model.py +0 -0
  235. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/models/hashable_model.py +0 -0
  236. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/models/model_params.py +0 -0
  237. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/models/operable_model.py +0 -0
  238. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/models/schema_model.py +0 -0
  239. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/ReAct/ReAct.py +0 -0
  240. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/ReAct/__init__.py +0 -0
  241. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/ReAct/utils.py +0 -0
  242. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/__init__.py +0 -0
  243. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/_act/__init__.py +0 -0
  244. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/_act/act.py +0 -0
  245. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/brainstorm/__init__.py +0 -0
  246. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/brainstorm/prompt.py +0 -0
  247. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/builder.py +0 -0
  248. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/chat/__init__.py +0 -0
  249. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/chat/chat.py +0 -0
  250. {lionagi-0.16.1/lionagi/libs/unstructured → lionagi-0.16.2/lionagi/operations/communicate}/__init__.py +0 -0
  251. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/communicate/communicate.py +0 -0
  252. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/flow.py +0 -0
  253. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/instruct/__init__.py +0 -0
  254. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/instruct/instruct.py +0 -0
  255. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/interpret/__init__.py +0 -0
  256. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/interpret/interpret.py +0 -0
  257. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/manager.py +0 -0
  258. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/node.py +0 -0
  259. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/operate/__init__.py +0 -0
  260. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/operate/operate.py +0 -0
  261. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/parse/__init__.py +0 -0
  262. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/parse/parse.py +0 -0
  263. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/plan/__init__.py +0 -0
  264. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/plan/plan.py +0 -0
  265. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/plan/prompt.py +0 -0
  266. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/select/__init__.py +0 -0
  267. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/select/select.py +0 -0
  268. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/select/utils.py +0 -0
  269. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/types.py +0 -0
  270. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/operations/utils.py +0 -0
  271. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/__init__.py +0 -0
  272. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/_concepts.py +0 -0
  273. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/action/__init__.py +0 -0
  274. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/action/function_calling.py +0 -0
  275. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/action/manager.py +0 -0
  276. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/action/tool.py +0 -0
  277. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/contracts.py +0 -0
  278. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/forms/__init__.py +0 -0
  279. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/forms/base.py +0 -0
  280. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/forms/flow.py +0 -0
  281. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/forms/form.py +0 -0
  282. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/forms/report.py +0 -0
  283. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/generic/__init__.py +0 -0
  284. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/generic/event.py +0 -0
  285. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/generic/pile.py +0 -0
  286. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/generic/processor.py +0 -0
  287. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/generic/progression.py +0 -0
  288. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/graph/__init__.py +0 -0
  289. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/graph/_utils.py +0 -0
  290. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/graph/edge.py +0 -0
  291. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/graph/graph.py +0 -0
  292. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/graph/node.py +0 -0
  293. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/ids.py +0 -0
  294. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/mail/__init__.py +0 -0
  295. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/mail/exchange.py +0 -0
  296. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/mail/mail.py +0 -0
  297. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/mail/mailbox.py +0 -0
  298. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/mail/manager.py +0 -0
  299. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/mail/package.py +0 -0
  300. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/messages/__init__.py +0 -0
  301. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/messages/action_request.py +0 -0
  302. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/messages/action_response.py +0 -0
  303. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/messages/assistant_response.py +0 -0
  304. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/messages/base.py +0 -0
  305. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/messages/instruction.py +0 -0
  306. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/messages/manager.py +0 -0
  307. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/messages/system.py +0 -0
  308. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/messages/templates/README.md +0 -0
  309. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
  310. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
  311. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
  312. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
  313. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
  314. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
  315. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/operatives/__init__.py +0 -0
  316. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/operatives/operative.py +0 -0
  317. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/operatives/step.py +0 -0
  318. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/protocols/types.py +0 -0
  319. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/py.typed +0 -0
  320. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/__init__.py +0 -0
  321. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/connections/__init__.py +0 -0
  322. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/connections/api_calling.py +0 -0
  323. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/connections/endpoint_config.py +0 -0
  324. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/connections/header_factory.py +0 -0
  325. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/connections/match_endpoint.py +0 -0
  326. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/connections/providers/__init__.py +0 -0
  327. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/connections/providers/anthropic_.py +0 -0
  328. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/connections/providers/claude_code_cli.py +0 -0
  329. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/connections/providers/exa_.py +0 -0
  330. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/connections/providers/nvidia_nim_.py +0 -0
  331. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/connections/providers/oai_.py +0 -0
  332. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/connections/providers/ollama_.py +0 -0
  333. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/connections/providers/perplexity_.py +0 -0
  334. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/connections/providers/types.py +0 -0
  335. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/hooks/__init__.py +0 -0
  336. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/hooks/_types.py +0 -0
  337. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/hooks/_utils.py +0 -0
  338. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/hooks/hook_event.py +0 -0
  339. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/hooks/hook_registry.py +0 -0
  340. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/imodel.py +0 -0
  341. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/manager.py +0 -0
  342. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/rate_limited_processor.py +0 -0
  343. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/resilience.py +0 -0
  344. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/third_party/README.md +0 -0
  345. {lionagi-0.16.1/lionagi/operations/communicate → lionagi-0.16.2/lionagi/service/third_party}/__init__.py +0 -0
  346. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/third_party/anthropic_models.py +0 -0
  347. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/third_party/claude_code.py +0 -0
  348. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/third_party/exa_models.py +0 -0
  349. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/third_party/openai_model_names.py +0 -0
  350. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/third_party/pplx_models.py +0 -0
  351. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/token_calculator.py +0 -0
  352. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/service/types.py +0 -0
  353. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/session/__init__.py +0 -0
  354. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/session/prompts.py +0 -0
  355. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/settings.py +0 -0
  356. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/tools/__init__.py +0 -0
  357. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/tools/base.py +0 -0
  358. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/tools/file/__init__.py +0 -0
  359. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/tools/file/reader.py +0 -0
  360. {lionagi-0.16.1 → lionagi-0.16.2}/lionagi/tools/types.py +0 -0
  361. {lionagi-0.16.1 → lionagi-0.16.2}/main.py +0 -0
  362. {lionagi-0.16.1 → lionagi-0.16.2}/mkdocs.yml +0 -0
  363. {lionagi-0.16.1 → lionagi-0.16.2}/scripts/README.md +0 -0
  364. {lionagi-0.16.1 → lionagi-0.16.2}/scripts/update_openai_models.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lionagi
3
- Version: 0.16.1
3
+ Version: 0.16.2
4
4
  Summary: An Intelligence Operating System.
5
5
  Author-email: HaiyangLi <quantocean.li@gmail.com>
6
6
  License: Apache License
@@ -233,7 +233,6 @@ Requires-Dist: pydantic>=2.8.0
233
233
  Requires-Dist: pydapter[pandas]>=1.1.1
234
234
  Requires-Dist: python-dotenv>=1.1.0
235
235
  Requires-Dist: tiktoken>=0.9.0
236
- Requires-Dist: toml>=0.8.0
237
236
  Provides-Extra: all
238
237
  Requires-Dist: aiosqlite>=0.21.0; extra == 'all'
239
238
  Requires-Dist: claude-code-sdk>=0.0.15; extra == 'all'
@@ -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
 
@@ -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
@@ -47,6 +50,9 @@ __all__ = (
47
50
  "DEFAULT_SERIALIZER_OPTION",
48
51
  "get_orjson_default",
49
52
  "json_dumps",
53
+ "make_options",
54
+ "json_dumpb",
55
+ "json_lines_iter",
50
56
  "lcall",
51
57
  "to_list",
52
58
  "acreate_path",
@@ -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)
@@ -9,10 +9,6 @@ from pydantic import BaseModel, ConfigDict, Field, field_serializer
9
9
  from typing_extensions import override
10
10
 
11
11
  from lionagi.libs.nested.flatten import flatten
12
- from lionagi.libs.nested.nget import nget
13
- from lionagi.libs.nested.ninsert import ninsert
14
- from lionagi.libs.nested.npop import npop
15
- from lionagi.libs.nested.nset import nset
16
12
  from lionagi.utils import UNDEFINED, copy, to_list
17
13
 
18
14
  IndiceType: TypeAlias = str | list[str | int]
@@ -120,6 +116,8 @@ class Note(BaseModel):
120
116
  Raises:
121
117
  KeyError: If the path is not found and no default value is provided.
122
118
  """
119
+ from lionagi.libs.nested.npop import npop
120
+
123
121
  indices = to_list(indices, flatten=True, dropna=True)
124
122
  return npop(self.content, indices, default)
125
123
 
@@ -130,6 +128,8 @@ class Note(BaseModel):
130
128
  indices: Path where to insert
131
129
  value: Value to insert
132
130
  """
131
+ from lionagi.libs.nested.ninsert import ninsert
132
+
133
133
  indices = to_list(indices, flatten=True, dropna=True)
134
134
  ninsert(self.content, indices, value)
135
135
 
@@ -144,6 +144,8 @@ class Note(BaseModel):
144
144
  if self.get(indices, None) is None:
145
145
  self.insert(indices, value)
146
146
  else:
147
+ from lionagi.libs.nested.nset import nset
148
+
147
149
  nset(self.content, indices, value)
148
150
 
149
151
  def get(
@@ -170,6 +172,8 @@ class Note(BaseModel):
170
172
  Raises:
171
173
  KeyError: If the path is not found and no default value is provided.
172
174
  """
175
+ from lionagi.libs.nested.nget import nget
176
+
173
177
  indices = to_list(indices, flatten=True, dropna=True)
174
178
  return nget(self.content, indices, default)
175
179
 
@@ -309,8 +309,8 @@ async def brainstormStream(
309
309
  )
310
310
  print(f"\n-----Exploring Idea-----\n{snippet}")
311
311
  new_branch = session.split(branch)
312
- resp = await new_branch.instruct(
313
- ins_, **(explore_kwargs or {})
312
+ resp = await new_branch.operate(
313
+ **ins_.to_dict(), **(explore_kwargs or {})
314
314
  )
315
315
  return InstructResponse(instruct=ins_, response=resp)
316
316
 
@@ -357,8 +357,8 @@ async def brainstormStream(
357
357
  else i.guidance
358
358
  )
359
359
  print(f"\n-----Exploring Idea-----\n{snippet}")
360
- seq_res = await branch.instruct(
361
- i, **(explore_kwargs or {})
360
+ seq_res = await branch.operate(
361
+ **i.to_dict(), **(explore_kwargs or {})
362
362
  )
363
363
  ins_res = InstructResponse(
364
364
  instruct=i, response=seq_res
@@ -389,8 +389,8 @@ async def brainstormStream(
389
389
 
390
390
  async def _explore(ins_: Instruct):
391
391
  child_branch = session.split(base_branch)
392
- child_resp = await child_branch.instruct(
393
- ins_, **(explore_kwargs or {})
392
+ child_resp = await child_branch.operate(
393
+ **ins_.to_dict(), **(explore_kwargs or {})
394
394
  )
395
395
  return InstructResponse(
396
396
  instruct=ins_, response=child_resp
@@ -453,8 +453,8 @@ async def brainstormStream(
453
453
  f"\n-----Exploring Idea (sequential in chunk)-----\n{snippet}"
454
454
  )
455
455
 
456
- seq_resp = await local_branch.instruct(
457
- ins_, **(explore_kwargs or {})
456
+ seq_resp = await local_branch.operate(
457
+ **ins_.to_dict(), **(explore_kwargs or {})
458
458
  )
459
459
  chunk_results.append(
460
460
  InstructResponse(
@@ -468,8 +468,8 @@ async def brainstormStream(
468
468
  all_responses = await alcall(
469
469
  all_chunks,
470
470
  explore_chunk_sequentially,
471
- flatten=True,
472
- dropna=True,
471
+ output_flatten=True,
472
+ output_dropna=True,
473
473
  )
474
474
  out.explore = all_responses
475
475
 
@@ -315,10 +315,6 @@ class Element(BaseModel, Observable):
315
315
  dict_["node_metadata"] = dict_.pop("metadata", {})
316
316
  return dict_
317
317
 
318
- def as_jsonable(self) -> dict:
319
- """Converts this Element to a JSON-serializable dictionary."""
320
- return self.to_dict(mode="json")
321
-
322
318
  @classmethod
323
319
  def from_dict(cls, data: dict) -> Element:
324
320
  """Deserializes a dictionary into an Element or subclass of Element.
@@ -363,19 +359,14 @@ class Element(BaseModel, Observable):
363
359
  def to_json(self, decode: bool = True) -> str:
364
360
  """Converts this Element to a JSON string."""
365
361
  dict_ = self._to_dict()
366
- if decode:
367
- return orjson.dumps(
368
- dict_,
369
- default=DEFAULT_ELEMENT_SERIALIZER,
370
- option=ln.DEFAULT_SERIALIZER_OPTION,
371
- ).decode()
372
- return orjson.dumps(dict_, default=DEFAULT_ELEMENT_SERIALIZER)
362
+ return ln.json_dumps(
363
+ dict_, default=DEFAULT_ELEMENT_SERIALIZER, decode=decode
364
+ )
373
365
 
374
366
  @classmethod
375
- def from_json(cls, json_str: str, mode: str = "python") -> Element:
367
+ def from_json(cls, json_str: str) -> Element:
376
368
  """Deserializes a JSON string into an Element or subclass of Element."""
377
- data = orjson.loads(json_str)
378
- return cls.from_dict(data, mode=mode)
369
+ return cls.from_dict(orjson.loads(json_str))
379
370
 
380
371
 
381
372
  DEFAULT_ELEMENT_SERIALIZER = ln.get_orjson_default(
@@ -176,9 +176,9 @@ class DataLogger:
176
176
  suffix = fp.suffix.lower()
177
177
  try:
178
178
  if suffix == ".csv":
179
- self.logs.to_csv_file(fp)
179
+ self.logs.dump(fp, "csv")
180
180
  elif suffix == ".json":
181
- self.logs.to_json_file(fp)
181
+ self.logs.dump(fp, "json")
182
182
  else:
183
183
  raise ValueError(f"Unsupported file extension: {suffix}")
184
184
 
@@ -116,7 +116,14 @@ class RoledMessage(Node, Sendable):
116
116
  if isinstance(self.template, Template):
117
117
  return self.template.render(**self.content)
118
118
  except Exception:
119
- return ln.json_dumps(self.content)
119
+ return ln.json_dumps(
120
+ self.content,
121
+ pretty=True,
122
+ sort_keys=True,
123
+ append_newline=True,
124
+ deterministic_sets=True,
125
+ decimal_as_float=True,
126
+ )
120
127
 
121
128
  @classmethod
122
129
  def create(cls, **kwargs):
@@ -150,6 +150,13 @@ class Endpoint:
150
150
  "branch",
151
151
  "aggregation_sources",
152
152
  "aggregation_count",
153
+ "action_strategy",
154
+ "parse_model",
155
+ "reason",
156
+ "actions",
157
+ "return_operative",
158
+ "operative_model",
159
+ "request_model",
153
160
  }
154
161
  payload = {
155
162
  k: v for k, v in payload.items() if k not in non_api_params
@@ -266,7 +266,12 @@ def _verbose_output(res) -> str:
266
266
  inp_ = None
267
267
 
268
268
  if isinstance(block.input, dict | list):
269
- inp_ = ln.json_dumps(block.input)
269
+ inp_ = ln.json_dumps(
270
+ block.input,
271
+ pretty=True,
272
+ sort_keys=True,
273
+ append_newline=True,
274
+ )
270
275
  else:
271
276
  inp_ = str(block.input)
272
277