lionagi 0.10.1__tar.gz → 0.10.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 (281) hide show
  1. {lionagi-0.10.1 → lionagi-0.10.3}/PKG-INFO +3 -3
  2. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/_types.py +1 -0
  3. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/adapters/toml_adapter.py +1 -1
  4. lionagi-0.10.3/lionagi/fields/__init__.py +29 -0
  5. {lionagi-0.10.1/lionagi/libs → lionagi-0.10.3/lionagi}/fields/action.py +0 -2
  6. lionagi-0.10.3/lionagi/fields/base.py +151 -0
  7. {lionagi-0.10.1/lionagi/libs → lionagi-0.10.3/lionagi}/fields/file.py +71 -40
  8. {lionagi-0.10.1/lionagi/libs → lionagi-0.10.3/lionagi}/fields/instruct.py +1 -3
  9. {lionagi-0.10.1/lionagi/libs → lionagi-0.10.3/lionagi}/fields/reason.py +4 -19
  10. lionagi-0.10.3/lionagi/libs/package/imports.py +21 -0
  11. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/synthlang_/base.py +1 -1
  12. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/synthlang_/resources/frameworks/framework_options.json +1 -1
  13. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/synthlang_/resources/mapping/lion_emoji_mapping.toml +1 -1
  14. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/synthlang_/resources/mapping/python_math_mapping.toml +1 -1
  15. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/synthlang_/resources/mapping/rust_chinese_mapping.toml +1 -1
  16. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/ReAct/ReAct.py +1 -1
  17. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/ReAct/utils.py +36 -15
  18. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/_act/act.py +1 -1
  19. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/brainstorm/brainstorm.py +1 -1
  20. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/instruct/instruct.py +1 -1
  21. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/operate/operate.py +1 -1
  22. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/plan/plan.py +1 -1
  23. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/select/select.py +1 -1
  24. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/utils.py +1 -1
  25. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/action/manager.py +1 -1
  26. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/operatives/step.py +2 -2
  27. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/session/branch.py +6 -60
  28. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/utils.py +214 -0
  29. lionagi-0.10.3/lionagi/version.py +1 -0
  30. {lionagi-0.10.1 → lionagi-0.10.3}/pyproject.toml +3 -3
  31. {lionagi-0.10.1 → lionagi-0.10.3}/uv.lock +6 -6
  32. lionagi-0.10.1/lionagi/libs/fields/__init__.py +0 -36
  33. lionagi-0.10.1/lionagi/libs/package/imports.py +0 -166
  34. lionagi-0.10.1/lionagi/version.py +0 -1
  35. {lionagi-0.10.1 → lionagi-0.10.3}/.env.example +0 -0
  36. {lionagi-0.10.1 → lionagi-0.10.3}/.github/FUNDING.yml +0 -0
  37. {lionagi-0.10.1 → lionagi-0.10.3}/.github/dependabot.yml +0 -0
  38. {lionagi-0.10.1 → lionagi-0.10.3}/.github/workflows/ci.yml +0 -0
  39. {lionagi-0.10.1 → lionagi-0.10.3}/.github/workflows/codeql.yml +0 -0
  40. {lionagi-0.10.1 → lionagi-0.10.3}/.github/workflows/docs.yml +0 -0
  41. {lionagi-0.10.1 → lionagi-0.10.3}/.github/workflows/release.yml +0 -0
  42. {lionagi-0.10.1 → lionagi-0.10.3}/.gitignore +0 -0
  43. {lionagi-0.10.1 → lionagi-0.10.3}/.pre-commit-config.yaml +0 -0
  44. {lionagi-0.10.1 → lionagi-0.10.3}/CODE_OF_CONDUCT.md +0 -0
  45. {lionagi-0.10.1 → lionagi-0.10.3}/CONTRIBUTING.md +0 -0
  46. {lionagi-0.10.1 → lionagi-0.10.3}/LICENSE +0 -0
  47. {lionagi-0.10.1 → lionagi-0.10.3}/README.md +0 -0
  48. {lionagi-0.10.1 → lionagi-0.10.3}/cookbooks/ch01_get_started.md +0 -0
  49. {lionagi-0.10.1 → lionagi-0.10.3}/cookbooks/ch02_concepts.md +0 -0
  50. {lionagi-0.10.1 → lionagi-0.10.3}/dev_tools/count_code_base_lines.py +0 -0
  51. {lionagi-0.10.1 → lionagi-0.10.3}/docs/Makefile +0 -0
  52. {lionagi-0.10.1 → lionagi-0.10.3}/docs/_static/custom.css +0 -0
  53. {lionagi-0.10.1 → lionagi-0.10.3}/docs/_templates/layout.html +0 -0
  54. {lionagi-0.10.1 → lionagi-0.10.3}/docs/conf.py +0 -0
  55. {lionagi-0.10.1 → lionagi-0.10.3}/docs/index.rst +0 -0
  56. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/action.rst +0 -0
  57. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/adapter.rst +0 -0
  58. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/branch.rst +0 -0
  59. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/branch_operations.rst +0 -0
  60. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/concepts.rst +0 -0
  61. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/element_id.rst +0 -0
  62. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/event.rst +0 -0
  63. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/form.rst +0 -0
  64. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/graph.rst +0 -0
  65. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/index.rst +0 -0
  66. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/instruct.rst +0 -0
  67. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/lib_file.rst +0 -0
  68. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/lib_nested.rst +0 -0
  69. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/lib_package.rst +0 -0
  70. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/lib_schema.rst +0 -0
  71. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/lib_validate.rst +0 -0
  72. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/log.rst +0 -0
  73. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/mail.rst +0 -0
  74. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/message.rst +0 -0
  75. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/models.rst +0 -0
  76. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/operative_step.rst +0 -0
  77. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/pile.rst +0 -0
  78. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/processor.rst +0 -0
  79. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/progression.rst +0 -0
  80. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/service.rst +0 -0
  81. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/session.rst +0 -0
  82. {lionagi-0.10.1 → lionagi-0.10.3}/docs/modules/utils.rst +0 -0
  83. {lionagi-0.10.1 → lionagi-0.10.3}/docs/tutorials/get_started.rst +0 -0
  84. {lionagi-0.10.1 → lionagi-0.10.3}/docs/tutorials/get_started_pt2.rst +0 -0
  85. {lionagi-0.10.1 → lionagi-0.10.3}/docs/tutorials/get_started_pt3.rst +0 -0
  86. {lionagi-0.10.1 → lionagi-0.10.3}/docs/tutorials/index.rst +0 -0
  87. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/__init__.py +0 -0
  88. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/_class_registry.py +0 -0
  89. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/_errors.py +0 -0
  90. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/adapters/__init__.py +0 -0
  91. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/adapters/adapter.py +0 -0
  92. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/adapters/json_adapter.py +0 -0
  93. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/adapters/pandas_/__init__.py +0 -0
  94. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/adapters/pandas_/csv_adapter.py +0 -0
  95. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/adapters/pandas_/excel_adapter.py +0 -0
  96. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/adapters/pandas_/pd_dataframe_adapter.py +0 -0
  97. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/adapters/pandas_/pd_series_adapter.py +0 -0
  98. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/adapters/types.py +0 -0
  99. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/__init__.py +0 -0
  100. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/file/__init__.py +0 -0
  101. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/file/chunk.py +0 -0
  102. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/file/concat_files.py +0 -0
  103. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/file/file_ops.py +0 -0
  104. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/file/params.py +0 -0
  105. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/file/process.py +0 -0
  106. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/file/save.py +0 -0
  107. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/nested/__init__.py +0 -0
  108. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/nested/flatten.py +0 -0
  109. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/nested/nfilter.py +0 -0
  110. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/nested/nget.py +0 -0
  111. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/nested/ninsert.py +0 -0
  112. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/nested/nmerge.py +0 -0
  113. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/nested/npop.py +0 -0
  114. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/nested/nset.py +0 -0
  115. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/nested/unflatten.py +0 -0
  116. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/nested/utils.py +0 -0
  117. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/package/__init__.py +0 -0
  118. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/package/management.py +0 -0
  119. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/package/params.py +0 -0
  120. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/package/system.py +0 -0
  121. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/parse.py +0 -0
  122. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/schema/__init__.py +0 -0
  123. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/schema/as_readable.py +0 -0
  124. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/schema/extract_code_block.py +0 -0
  125. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/schema/extract_docstring.py +0 -0
  126. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/schema/function_to_schema.py +0 -0
  127. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/schema/json_schema.py +0 -0
  128. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/__init__.py +0 -0
  129. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/base.py +0 -0
  130. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/llmlingua.py +0 -0
  131. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/perplexity.py +0 -0
  132. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/symbolic_compress_context.py +0 -0
  133. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/synthlang.py +0 -0
  134. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/synthlang_/resources/frameworks/abstract_algebra.toml +0 -0
  135. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/synthlang_/resources/frameworks/category_theory.toml +0 -0
  136. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/synthlang_/resources/frameworks/complex_analysis.toml +0 -0
  137. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/synthlang_/resources/frameworks/group_theory.toml +0 -0
  138. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/synthlang_/resources/frameworks/math_logic.toml +0 -0
  139. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/synthlang_/resources/frameworks/reflective_patterns.toml +0 -0
  140. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/synthlang_/resources/frameworks/set_theory.toml +0 -0
  141. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/synthlang_/resources/frameworks/topology_fundamentals.toml +0 -0
  142. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/synthlang_/resources/utility/base_synthlang_system_prompt.toml +0 -0
  143. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/synthlang_/translate_to_synthlang.py +0 -0
  144. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/token_transform/types.py +0 -0
  145. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/validate/__init__.py +0 -0
  146. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/validate/common_field_validators.py +0 -0
  147. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/validate/fuzzy_match_keys.py +0 -0
  148. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/validate/fuzzy_validate_mapping.py +0 -0
  149. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/validate/string_similarity.py +0 -0
  150. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/libs/validate/validate_boolean.py +0 -0
  151. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/models/__init__.py +0 -0
  152. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/models/field_model.py +0 -0
  153. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/models/hashable_model.py +0 -0
  154. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/models/model_params.py +0 -0
  155. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/models/note.py +0 -0
  156. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/models/operable_model.py +0 -0
  157. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/models/schema_model.py +0 -0
  158. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/ReAct/__init__.py +0 -0
  159. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/__init__.py +0 -0
  160. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/_act/__init__.py +0 -0
  161. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/brainstorm/__init__.py +0 -0
  162. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/brainstorm/prompt.py +0 -0
  163. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/chat/__init__.py +0 -0
  164. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/chat/chat.py +0 -0
  165. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/communicate/__init__.py +0 -0
  166. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/communicate/communicate.py +0 -0
  167. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/instruct/__init__.py +0 -0
  168. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/interpret/__init__.py +0 -0
  169. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/interpret/interpret.py +0 -0
  170. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/manager.py +0 -0
  171. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/operate/__init__.py +0 -0
  172. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/parse/__init__.py +0 -0
  173. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/parse/parse.py +0 -0
  174. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/plan/__init__.py +0 -0
  175. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/plan/prompt.py +0 -0
  176. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/select/__init__.py +0 -0
  177. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/select/utils.py +0 -0
  178. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/translate/__init__.py +0 -0
  179. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/translate/translate.py +0 -0
  180. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/operations/types.py +0 -0
  181. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/__init__.py +0 -0
  182. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/_concepts.py +0 -0
  183. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/action/__init__.py +0 -0
  184. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/action/function_calling.py +0 -0
  185. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/action/tool.py +0 -0
  186. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/forms/__init__.py +0 -0
  187. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/forms/base.py +0 -0
  188. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/forms/flow.py +0 -0
  189. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/forms/form.py +0 -0
  190. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/forms/report.py +0 -0
  191. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/generic/__init__.py +0 -0
  192. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/generic/element.py +0 -0
  193. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/generic/event.py +0 -0
  194. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/generic/log.py +0 -0
  195. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/generic/pile.py +0 -0
  196. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/generic/processor.py +0 -0
  197. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/generic/progression.py +0 -0
  198. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/graph/__init__.py +0 -0
  199. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/graph/edge.py +0 -0
  200. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/graph/graph.py +0 -0
  201. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/graph/node.py +0 -0
  202. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/mail/__init__.py +0 -0
  203. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/mail/exchange.py +0 -0
  204. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/mail/mail.py +0 -0
  205. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/mail/mailbox.py +0 -0
  206. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/mail/manager.py +0 -0
  207. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/mail/package.py +0 -0
  208. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/messages/__init__.py +0 -0
  209. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/messages/action_request.py +0 -0
  210. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/messages/action_response.py +0 -0
  211. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/messages/assistant_response.py +0 -0
  212. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/messages/base.py +0 -0
  213. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/messages/instruction.py +0 -0
  214. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/messages/manager.py +0 -0
  215. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/messages/message.py +0 -0
  216. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/messages/system.py +0 -0
  217. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/messages/templates/README.md +0 -0
  218. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
  219. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
  220. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
  221. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
  222. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
  223. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
  224. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/operatives/__init__.py +0 -0
  225. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/operatives/operative.py +0 -0
  226. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/protocols/types.py +0 -0
  227. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/__init__.py +0 -0
  228. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/endpoints/__init__.py +0 -0
  229. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/endpoints/base.py +0 -0
  230. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/endpoints/chat_completion.py +0 -0
  231. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/endpoints/match_endpoint.py +0 -0
  232. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/endpoints/rate_limited_processor.py +0 -0
  233. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/endpoints/token_calculator.py +0 -0
  234. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/imodel.py +0 -0
  235. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/manager.py +0 -0
  236. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/__init__.py +0 -0
  237. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/anthropic_/__init__.py +0 -0
  238. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/anthropic_/messages.py +0 -0
  239. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/exa_/__init__.py +0 -0
  240. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/exa_/models.py +0 -0
  241. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/exa_/search.py +0 -0
  242. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/exa_/types.py +0 -0
  243. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/groq_/__init__.py +0 -0
  244. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/groq_/chat_completions.py +0 -0
  245. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/ollama_/__init__.py +0 -0
  246. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/ollama_/chat_completions.py +0 -0
  247. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/openai_/__init__.py +0 -0
  248. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/openai_/chat_completions.py +0 -0
  249. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/openai_/spec.py +0 -0
  250. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/openrouter_/__init__.py +0 -0
  251. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/openrouter_/chat_completions.py +0 -0
  252. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/perplexity_/__init__.py +0 -0
  253. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/perplexity_/chat_completions.py +0 -0
  254. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/perplexity_/models.py +0 -0
  255. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/providers/types.py +0 -0
  256. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/service/types.py +0 -0
  257. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/session/__init__.py +0 -0
  258. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/session/prompts.py +0 -0
  259. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/session/session.py +0 -0
  260. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/settings.py +0 -0
  261. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/__init__.py +0 -0
  262. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/base.py +0 -0
  263. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/browser/__init__.py +0 -0
  264. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/browser/providers/__init__.py +0 -0
  265. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/browser/providers/browser_use_.py +0 -0
  266. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/code/__init__.py +0 -0
  267. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/code/coder.py +0 -0
  268. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/code/manager.py +0 -0
  269. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/code/providers/__init__.py +0 -0
  270. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/code/providers/aider_.py +0 -0
  271. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/code/providers/e2b_.py +0 -0
  272. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/code/sandbox.py +0 -0
  273. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/file/__init__.py +0 -0
  274. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/file/manager.py +0 -0
  275. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/file/providers/__init__.py +0 -0
  276. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/file/providers/docling_.py +0 -0
  277. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/file/reader.py +0 -0
  278. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/file/writer.py +0 -0
  279. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/query/__init__.py +0 -0
  280. {lionagi-0.10.1 → lionagi-0.10.3}/lionagi/tools/types.py +0 -0
  281. {lionagi-0.10.1 → lionagi-0.10.3}/prompts/doc_style.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lionagi
3
- Version: 0.10.1
3
+ Version: 0.10.3
4
4
  Summary: An Intelligence Operating System.
5
5
  Author-email: HaiyangLi <quantocean.li@gmail.com>
6
6
  License: Apache License
@@ -221,11 +221,11 @@ Classifier: Programming Language :: Python :: 3.13
221
221
  Requires-Python: >=3.10
222
222
  Requires-Dist: aiocache>=0.12.0
223
223
  Requires-Dist: aiohttp>=3.11.0
224
- Requires-Dist: jinja2>=3.1.0
224
+ Requires-Dist: jinja2>=3.0.0
225
225
  Requires-Dist: pandas>=2.0.0
226
226
  Requires-Dist: pillow>=10.0.0
227
227
  Requires-Dist: pydantic>=2.0.0
228
- Requires-Dist: python-dotenv>=1.0.1
228
+ Requires-Dist: python-dotenv>=1.1.0
229
229
  Requires-Dist: tiktoken>=0.8.0
230
230
  Requires-Dist: toml>=0.9.0
231
231
  Provides-Extra: llms
@@ -1 +1,2 @@
1
+ from .fields import *
1
2
  from .protocols.types import *
@@ -141,7 +141,7 @@ class TomlFileAdapter(Adapter):
141
141
  dict | list[dict]
142
142
  The loaded data from file.
143
143
  """
144
- with open(obj, "r", encoding="utf-8") as f:
144
+ with open(obj, encoding="utf-8") as f:
145
145
  result = toml.load(f, **kwargs)
146
146
 
147
147
  # Handle array of tables in TOML for "many" case
@@ -0,0 +1,29 @@
1
+ from .action import ActionRequestModel, ActionResponseModel
2
+ from .base import (
3
+ CodeSnippet,
4
+ Outline,
5
+ OutlineItem,
6
+ Section,
7
+ Source,
8
+ TextSnippet,
9
+ )
10
+ from .file import CodeFile, Documentation, File
11
+ from .instruct import Instruct, InstructResponse
12
+ from .reason import Reason
13
+
14
+ __all__ = (
15
+ "ActionRequestModel",
16
+ "ActionResponseModel",
17
+ "Source",
18
+ "TextSnippet",
19
+ "CodeSnippet",
20
+ "Section",
21
+ "OutlineItem",
22
+ "Outline",
23
+ "File",
24
+ "CodeFile",
25
+ "Documentation",
26
+ "Instruct",
27
+ "InstructResponse",
28
+ "Reason",
29
+ )
@@ -16,9 +16,7 @@ from lionagi.utils import to_dict, to_json, to_list
16
16
 
17
17
  __all__ = (
18
18
  "ActionRequestModel",
19
- "ACTION_REQUESTS_FIELD",
20
19
  "ActionResponseModel",
21
- "ACTION_RESPONSES_FIELD",
22
20
  )
23
21
 
24
22
 
@@ -0,0 +1,151 @@
1
+ from enum import Enum
2
+
3
+ from pydantic import Field, HttpUrl
4
+
5
+ from lionagi.models import HashableModel
6
+
7
+ __all__ = (
8
+ "Source",
9
+ "TextSnippet",
10
+ "CodeSnippet",
11
+ "Section",
12
+ "OutlineItem",
13
+ "Outline",
14
+ )
15
+
16
+
17
+ class Source(HashableModel):
18
+ """
19
+ Represents a citation or external source, such as:
20
+ - a website,
21
+ - documentation link,
22
+ - research paper,
23
+ - or any external resource.
24
+ """
25
+
26
+ title: str = Field(
27
+ ...,
28
+ description="Short label or title for the reference (e.g. 'Pydantic Docs', 'RFC 3986').",
29
+ )
30
+
31
+ url: str | HttpUrl | None = Field(
32
+ None,
33
+ description="Full URL or local path pointing to the resource. Must conform to standard URL format.",
34
+ )
35
+
36
+ note: str | None = Field(
37
+ default=None,
38
+ description=(
39
+ "Optional additional note explaining why this reference is relevant or what it contains."
40
+ ),
41
+ )
42
+
43
+
44
+ class SnippetType(str, Enum):
45
+ TEXT = "text"
46
+ CODE = "code"
47
+
48
+
49
+ class TextSnippet(HashableModel):
50
+ """
51
+ Specialized snippet for textual/prose content.
52
+ """
53
+
54
+ type: SnippetType = Field(
55
+ SnippetType.TEXT,
56
+ description=(
57
+ "Must be 'text' for textual snippets. Ensures explicit type distinction."
58
+ ),
59
+ )
60
+ content: str = Field(
61
+ ...,
62
+ description=(
63
+ "The actual text. Can be a paragraph, bullet list, or any narrative content."
64
+ ),
65
+ )
66
+
67
+
68
+ class CodeSnippet(HashableModel):
69
+ """
70
+ Specialized snippet for source code or command-line examples.
71
+ """
72
+
73
+ type: SnippetType = Field(
74
+ SnippetType.CODE,
75
+ description=(
76
+ "Must be 'code' for code snippets. Allows separate handling or formatting."
77
+ ),
78
+ )
79
+ content: str = Field(
80
+ ...,
81
+ description=(
82
+ "The actual code or command sequence. Should be well-formatted so it can be rendered properly."
83
+ ),
84
+ )
85
+
86
+
87
+ class Section(HashableModel):
88
+ """
89
+ A single section of a document or article. Each section has:
90
+ - A title
91
+ - A sequential list of content snippets (text or code),
92
+ which appear in the intended reading order.
93
+ - Optional sources specifically cited in this section.
94
+ """
95
+
96
+ title: str = Field(
97
+ ...,
98
+ description=(
99
+ "The section heading or label, e.g., 'Introduction', 'Implementation Steps'."
100
+ ),
101
+ )
102
+ snippets: list[TextSnippet | CodeSnippet] = Field(
103
+ default_factory=list,
104
+ description=(
105
+ "Ordered list of content snippets. Could be multiple text blocks, code examples, etc."
106
+ ),
107
+ )
108
+
109
+ sources: list[Source] = Field(
110
+ default_factory=list,
111
+ description=(
112
+ "References specifically cited in this section. "
113
+ "If sources are stored at the doc-level, this can be omitted."
114
+ ),
115
+ )
116
+
117
+
118
+ class OutlineItem(HashableModel):
119
+ """
120
+ Represents a single outline item, which could become a full section later.
121
+ """
122
+
123
+ heading: str = Field(
124
+ ...,
125
+ description="Short name or label for this item, e.g., 'Chapter 1: Basics'.",
126
+ )
127
+ summary: str | None = Field(
128
+ default=None,
129
+ description=(
130
+ "A brief description of what this section will cover, if known."
131
+ ),
132
+ )
133
+
134
+
135
+ class Outline(HashableModel):
136
+ """
137
+ A top-level outline for a document or article.
138
+ Usually used in early planning stages.
139
+ """
140
+
141
+ topic: str = Field(
142
+ ..., description="Working title or overarching topic of the document."
143
+ )
144
+ items: list[OutlineItem] = Field(
145
+ default_factory=list,
146
+ description="List of major outline points or sections planned.",
147
+ )
148
+ notes: str | None = Field(
149
+ default=None,
150
+ description="Any additional remarks, questions, or brainstorming notes for the outline.",
151
+ )
@@ -1,26 +1,29 @@
1
1
  from pathlib import Path
2
2
 
3
- from pydantic import BaseModel, Field, field_validator
3
+ from pydantic import Field, field_validator
4
4
 
5
- from lionagi.models import FieldModel
5
+ from .base import HashableModel, Source
6
6
 
7
-
8
- class Source(BaseModel):
9
- title: str | None = None
10
- url: str | None = None
7
+ __all__ = (
8
+ "File",
9
+ "CodeFile",
10
+ "Documentation",
11
+ )
11
12
 
12
13
 
13
- class File(BaseModel):
14
+ class File(HashableModel):
14
15
  """
15
- Represents a generic file with an optional name, content, and brief description.
16
- Useful for capturing and validating metadata about any kind of file within a project.
16
+ Represents a generic file with an optional name, content, and brief
17
+ description. Useful for capturing and validating metadata about any
18
+ kind of file within a project.
17
19
  """
18
20
 
19
21
  file_name: str | None = Field(
20
22
  default=None,
21
23
  description=(
22
- "Provide the name of the file or its relative path in the project. "
23
- "If an absolute path is given, it will be converted to a string. "
24
+ "Provide the name of the file or its relative path in the "
25
+ "project. If an absolute path is given, it will be converted"
26
+ " to a string. "
24
27
  ),
25
28
  examples=[
26
29
  "session.py",
@@ -32,8 +35,8 @@ class File(BaseModel):
32
35
  default=None,
33
36
  description=(
34
37
  "Paste or generate the full textual content of the file here. "
35
- "For example, this might include plain text, Markdown, or any other text format.\n"
36
- "Examples:\n"
38
+ "For example, this might include plain text, Markdown, or any "
39
+ "other text format.\nExamples:\n"
37
40
  " - '# My Title\\nSome description...'\n"
38
41
  " - 'function greet() { return \"Hello\"; }'"
39
42
  ),
@@ -41,8 +44,9 @@ class File(BaseModel):
41
44
  description: str | None = Field(
42
45
  default=None,
43
46
  description=(
44
- "Briefly explain the file's purpose or function within the project. "
45
- "This can be a short summary describing why this file exists or what it does.\n"
47
+ "Briefly explain the file's purpose or function within the "
48
+ "project. This can be a short summary describing why this "
49
+ "file is needed and/or what it does."
46
50
  ),
47
51
  examples=[
48
52
  "Manages user session logic for the LionAGI framework.",
@@ -56,6 +60,38 @@ class File(BaseModel):
56
60
  return str(value)
57
61
  return value
58
62
 
63
+ def render_content(
64
+ self,
65
+ header: str | None = None,
66
+ footer: str | None = None,
67
+ ) -> str:
68
+ text = f"\n{header}\n\n" if header else ""
69
+ text += self.content if self.content else ""
70
+ if not footer:
71
+ return text
72
+ return text + f"\n\n{footer}\n"
73
+
74
+ def persist(
75
+ self,
76
+ directory: Path | str,
77
+ overwrite: bool = True,
78
+ timestamp: bool = False,
79
+ random_hash_digits: int = None,
80
+ header: str | None = None,
81
+ footer: str | None = None,
82
+ ) -> Path:
83
+ from lionagi.utils import create_path
84
+
85
+ fp = create_path(
86
+ directory=directory,
87
+ filename=self.file_name,
88
+ file_exist_ok=overwrite,
89
+ timestamp=timestamp,
90
+ random_hash_digits=random_hash_digits,
91
+ )
92
+ fp.write_text(self.render_content(header=header, footer=footer))
93
+ return fp
94
+
59
95
 
60
96
  class CodeFile(File):
61
97
  """
@@ -83,7 +119,7 @@ class CodeFile(File):
83
119
  default=None,
84
120
  description=(
85
121
  "Provide or generate the **full source code**. This should be the primary text content "
86
- "of the code file, including all function/class definitions.\n"
122
+ "of the code file, including all function/class definitions.\nNo md codeblock, only raw code"
87
123
  ),
88
124
  examples=[
89
125
  'def my_function():\\n print("Hello, world!")',
@@ -112,10 +148,6 @@ class Documentation(File):
112
148
  "Provide the primary Markdown (or similar) content for the documentation. "
113
149
  "This can include headings, bullet points, tables, code snippets, etc.\n"
114
150
  ),
115
- examples=[
116
- "# Getting Started\\nThis guide walks you through ...",
117
- "# API Reference\\n## Session Class\\n...",
118
- ],
119
151
  )
120
152
  sources: list[Source] | None = Field(
121
153
  default=None,
@@ -125,23 +157,22 @@ class Documentation(File):
125
157
  ),
126
158
  )
127
159
 
128
-
129
- FILE_FIELD = FieldModel(
130
- name="file",
131
- annotation=File | None,
132
- default=None,
133
- )
134
-
135
- CODE_FILE_FIELD = FieldModel(
136
- name="code_file",
137
- annotation=CodeFile | None,
138
- default=None,
139
- )
140
-
141
- DOCUMENTATION_FIELD = FieldModel(
142
- name="documentation",
143
- annotation=Documentation | None,
144
- default=None,
145
- )
146
-
147
- # File: lionagi/libs/fields/file.py
160
+ def render_content(
161
+ self,
162
+ header: str | None = None,
163
+ footer: str | None = None,
164
+ include_source: bool = False,
165
+ ) -> str:
166
+ """
167
+ Renders the documentation content, optionally including citations for sources.
168
+ """
169
+ footer = footer or ""
170
+ if include_source and self.sources:
171
+ footer = "\n\n## Sources\n"
172
+ for source in self.sources:
173
+ footer += f"- [{source.title}]({source.url})\n"
174
+ footer += f" - {source.note}\n" if source.note else ""
175
+ return super().render_content(header=header, footer=footer)
176
+
177
+
178
+ # File: lionagi/fields/file.py
@@ -16,8 +16,6 @@ from lionagi.utils import to_num
16
16
  __all__ = (
17
17
  "Instruct",
18
18
  "InstructResponse",
19
- "INSTRUCT_FIELD",
20
- "LIST_INSTRUCT_FIELD",
21
19
  )
22
20
 
23
21
 
@@ -150,4 +148,4 @@ LIST_INSTRUCT_FIELD_MODEL = FieldModel(
150
148
  default=None,
151
149
  )
152
150
 
153
- # File: lionagi/libs/fields/instruct.py
151
+ # File: lionagi/fields/instruct.py
@@ -7,12 +7,7 @@ from pydantic import BaseModel, Field, field_validator
7
7
  from lionagi.models import FieldModel
8
8
  from lionagi.utils import to_num
9
9
 
10
- __all__ = (
11
- "Reason",
12
- "REASON_FIELD",
13
- "CONFIDENCE_SCORE_FIELD",
14
- "validate_confidence_score",
15
- )
10
+ __all__ = ("Reason",)
16
11
 
17
12
 
18
13
  class Reason(BaseModel):
@@ -27,10 +22,9 @@ class Reason(BaseModel):
27
22
  "how well you've met user expectations. Use this guide:\n"
28
23
  " • 1.0: Highly confident\n"
29
24
  " • 0.8-1.0: Reasonably sure\n"
30
- " • 0.5-0.8: Re-check or refine\n"
31
- " • 0.0-0.5: Off track"
25
+ " • 0.5-0.8: Re-check, refine or backtrack\n"
26
+ " • 0.0-0.5: Off track, stop"
32
27
  ),
33
- examples=[0.821, 0.257, 0.923, 0.439],
34
28
  )
35
29
 
36
30
  @field_validator("confidence_score", mode="before")
@@ -51,15 +45,6 @@ def validate_confidence_score(cls, v):
51
45
  return -1
52
46
 
53
47
 
54
- CONFIDENCE_SCORE_FIELD = FieldModel(
55
- name="confidence_score",
56
- annotation=float | None,
57
- default=None,
58
- validator=validate_confidence_score,
59
- validator_kwargs={"mode": "before"},
60
- )
61
-
62
-
63
48
  REASON_FIELD = FieldModel(
64
49
  name="reason",
65
50
  annotation=Reason | None,
@@ -67,4 +52,4 @@ REASON_FIELD = FieldModel(
67
52
  description="**Provide a concise reason for the decision made.**",
68
53
  )
69
54
 
70
- # File: lionagi/libs/fields/reason.py
55
+ # File: lionagi/fields/reason.py
@@ -0,0 +1,21 @@
1
+ # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from lionagi.utils import (
6
+ check_import,
7
+ import_module,
8
+ install_import,
9
+ is_import_installed,
10
+ run_package_manager_command,
11
+ )
12
+
13
+ # backward compatibility
14
+
15
+ __all__ = (
16
+ "run_package_manager_command",
17
+ "check_import",
18
+ "import_module",
19
+ "install_import",
20
+ "is_import_installed",
21
+ )
@@ -31,7 +31,7 @@ class SynthlangFramework(Resource):
31
31
  import json
32
32
 
33
33
  fp = here / FRAMEWORK_PATH / "framework_options.json"
34
- with open(fp, "r", encoding="utf-8") as f:
34
+ with open(fp, encoding="utf-8") as f:
35
35
  return json.load(f)
36
36
 
37
37
  @classmethod
@@ -58,4 +58,4 @@ False = "⊭"
58
58
  "⧦⧦⧦" = "⧦"
59
59
  " " = "◻︎"
60
60
  "◻︎◻︎" = "◼︎"
61
- "###" = "#"
61
+ "###" = "#"
@@ -38,4 +38,4 @@ False = "⊭"
38
38
  "⧦⧦⧦" = "⧦"
39
39
  " " = "◻︎"
40
40
  "◻︎◻︎" = "◼︎"
41
- "###" = "#"
41
+ "###" = "#"
@@ -57,4 +57,4 @@ self = "自"
57
57
  Clone = "隆"
58
58
  clone = "隆"
59
59
  derive = "衍"
60
- "println!" = "印"
60
+ "println!" = "印"
@@ -8,7 +8,7 @@ from typing import TYPE_CHECKING, Any, Literal
8
8
 
9
9
  from pydantic import BaseModel
10
10
 
11
- from lionagi.libs.fields.instruct import Instruct
11
+ from lionagi.fields.instruct import Instruct
12
12
  from lionagi.libs.schema.as_readable import as_readable
13
13
  from lionagi.libs.validate.common_field_validators import (
14
14
  validate_model_to_type,
@@ -4,34 +4,45 @@
4
4
 
5
5
  from typing import ClassVar, Literal
6
6
 
7
- from pydantic import BaseModel, Field
7
+ from pydantic import Field, field_validator
8
8
 
9
+ from lionagi.models import HashableModel
9
10
 
10
- class PlannedAction(BaseModel):
11
+
12
+ class PlannedAction(HashableModel):
11
13
  """
12
- Short descriptor for an upcoming action/tool invocation the LLM wants to perform.
13
- The model can hold multiple actions in a single round if needed.
14
+ Short descriptor for an upcoming action/tool invocation the LLM wants to
15
+ perform. The model can hold multiple actions in a single round if needed.
14
16
  """
15
17
 
16
- action_type: str = Field(
17
- ...,
18
- description="The name or type of tool/action to invoke (e.g., 'search_exa', 'reader_tool').",
18
+ action_type: str | None = Field(
19
+ default=None,
20
+ description=(
21
+ "The name or type of tool/action to invoke. "
22
+ "(e.g., 'search_exa', 'reader_tool')"
23
+ ),
19
24
  )
20
- description: str = Field(
21
- ...,
22
- description="A short explanation of why or what is intended to achieve with this action.",
25
+ description: str | None = Field(
26
+ default=None,
27
+ description=(
28
+ "A short description of the action to perform. "
29
+ "This should be a concise summary of what the action entails."
30
+ "Also include your rationale for this action, if applicable."
31
+ ),
23
32
  )
24
33
 
25
34
 
26
- class ReActAnalysis(BaseModel):
35
+ class ReActAnalysis(HashableModel):
27
36
  """
28
37
  Captures the ReAct chain-of-thought output each round:
29
38
  1) The LLM's 'analysis' (reasoning),
30
39
  2) A list of planned actions to perform before finalizing,
31
40
  3) Indication whether more expansions/rounds are needed,
32
41
  4) Additional tuning knobs: how to handle validation, how to execute actions, etc.
33
- Remember do not repeat yourself, and aim to use the most efficient way to achieve
34
- the goal to user's satisfaction.
42
+
43
+ Note:
44
+ - Retain from repeating yourself
45
+ - use the most efficient way to achieve the goal to user's satisfaction
35
46
  """
36
47
 
37
48
  # Standard ReAct strings for controlling expansions:
@@ -101,6 +112,16 @@ class ReActAnalysis(BaseModel):
101
112
  )
102
113
 
103
114
 
104
- class Analysis(BaseModel):
115
+ class Analysis(HashableModel):
116
+
117
+ answer: str | None = None
105
118
 
106
- answer: str
119
+ @field_validator("answer", mode="before")
120
+ def _validate_answer(cls, value):
121
+ if not value:
122
+ return None
123
+ if isinstance(value, str) and not value.strip():
124
+ return None
125
+ if not isinstance(value, str):
126
+ raise ValueError("Answer must be a non-empty string.")
127
+ return value.strip()
@@ -7,7 +7,7 @@ from typing import TYPE_CHECKING
7
7
 
8
8
  from pydantic import BaseModel
9
9
 
10
- from lionagi.libs.fields.action import ActionResponseModel
10
+ from lionagi.fields.action import ActionResponseModel
11
11
  from lionagi.protocols.types import ActionRequest, Log
12
12
 
13
13
  if TYPE_CHECKING:
@@ -7,7 +7,7 @@ from typing import Any, Literal
7
7
 
8
8
  from pydantic import BaseModel
9
9
 
10
- from lionagi.libs.fields.instruct import (
10
+ from lionagi.fields.instruct import (
11
11
  LIST_INSTRUCT_FIELD_MODEL,
12
12
  Instruct,
13
13
  InstructResponse,
@@ -4,7 +4,7 @@
4
4
 
5
5
  from typing import TYPE_CHECKING, Any
6
6
 
7
- from lionagi.libs.fields.instruct import Instruct
7
+ from lionagi.fields.instruct import Instruct
8
8
 
9
9
  if TYPE_CHECKING:
10
10
  from lionagi.session.branch import Branch
@@ -7,7 +7,7 @@ from typing import TYPE_CHECKING, Literal
7
7
 
8
8
  from pydantic import BaseModel, JsonValue
9
9
 
10
- from lionagi.libs.fields.instruct import Instruct
10
+ from lionagi.fields.instruct import Instruct
11
11
  from lionagi.models import FieldModel, ModelParams
12
12
  from lionagi.protocols.types import (
13
13
  Instruction,
@@ -6,7 +6,7 @@ from typing import Any, Literal
6
6
 
7
7
  from pydantic import BaseModel
8
8
 
9
- from lionagi.libs.fields.instruct import (
9
+ from lionagi.fields.instruct import (
10
10
  LIST_INSTRUCT_FIELD_MODEL,
11
11
  Instruct,
12
12
  InstructResponse,
@@ -7,7 +7,7 @@ from typing import TYPE_CHECKING, Any
7
7
 
8
8
  from pydantic import BaseModel
9
9
 
10
- from lionagi.libs.fields.instruct import Instruct
10
+ from lionagi.fields.instruct import Instruct
11
11
 
12
12
  from .utils import SelectionModel
13
13
 
@@ -2,7 +2,7 @@
2
2
  #
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
 
5
- from lionagi.libs.fields.instruct import Instruct
5
+ from lionagi.fields.instruct import Instruct
6
6
  from lionagi.session.session import Branch, Session
7
7
 
8
8