lionagi 0.8.2__tar.gz → 0.8.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 (248) hide show
  1. {lionagi-0.8.2 → lionagi-0.8.3}/PKG-INFO +1 -1
  2. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/ReAct/ReAct.py +7 -11
  3. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/ReAct/utils.py +4 -4
  4. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/action/function_calling.py +12 -2
  5. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/action/tool.py +11 -0
  6. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/messages/instruction.py +104 -51
  7. lionagi-0.8.3/lionagi/version.py +1 -0
  8. {lionagi-0.8.2 → lionagi-0.8.3}/pyproject.toml +1 -1
  9. {lionagi-0.8.2 → lionagi-0.8.3}/uv.lock +1 -1
  10. lionagi-0.8.2/lionagi/version.py +0 -1
  11. {lionagi-0.8.2 → lionagi-0.8.3}/.env.example +0 -0
  12. {lionagi-0.8.2 → lionagi-0.8.3}/.github/FUNDING.yml +0 -0
  13. {lionagi-0.8.2 → lionagi-0.8.3}/.github/dependabot.yml +0 -0
  14. {lionagi-0.8.2 → lionagi-0.8.3}/.github/workflows/ci.yml +0 -0
  15. {lionagi-0.8.2 → lionagi-0.8.3}/.github/workflows/codeql.yml +0 -0
  16. {lionagi-0.8.2 → lionagi-0.8.3}/.github/workflows/docs.yml +0 -0
  17. {lionagi-0.8.2 → lionagi-0.8.3}/.github/workflows/release.yml +0 -0
  18. {lionagi-0.8.2 → lionagi-0.8.3}/.gitignore +0 -0
  19. {lionagi-0.8.2 → lionagi-0.8.3}/.pre-commit-config.yaml +0 -0
  20. {lionagi-0.8.2 → lionagi-0.8.3}/CODE_OF_CONDUCT.md +0 -0
  21. {lionagi-0.8.2 → lionagi-0.8.3}/CONTRIBUTING.md +0 -0
  22. {lionagi-0.8.2 → lionagi-0.8.3}/LICENSE +0 -0
  23. {lionagi-0.8.2 → lionagi-0.8.3}/README.md +0 -0
  24. {lionagi-0.8.2 → lionagi-0.8.3}/cookbooks/ch01_get_started.md +0 -0
  25. {lionagi-0.8.2 → lionagi-0.8.3}/cookbooks/ch02_concepts.md +0 -0
  26. {lionagi-0.8.2 → lionagi-0.8.3}/dev_tools/count_code_base_lines.py +0 -0
  27. {lionagi-0.8.2 → lionagi-0.8.3}/docs/Makefile +0 -0
  28. {lionagi-0.8.2 → lionagi-0.8.3}/docs/_static/custom.css +0 -0
  29. {lionagi-0.8.2 → lionagi-0.8.3}/docs/_templates/layout.html +0 -0
  30. {lionagi-0.8.2 → lionagi-0.8.3}/docs/conf.py +0 -0
  31. {lionagi-0.8.2 → lionagi-0.8.3}/docs/index.rst +0 -0
  32. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/action.rst +0 -0
  33. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/adapter.rst +0 -0
  34. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/branch.rst +0 -0
  35. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/branch_operations.rst +0 -0
  36. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/concepts.rst +0 -0
  37. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/element_id.rst +0 -0
  38. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/event.rst +0 -0
  39. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/form.rst +0 -0
  40. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/graph.rst +0 -0
  41. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/index.rst +0 -0
  42. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/instruct.rst +0 -0
  43. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/lib_file.rst +0 -0
  44. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/lib_nested.rst +0 -0
  45. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/lib_package.rst +0 -0
  46. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/lib_schema.rst +0 -0
  47. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/lib_validate.rst +0 -0
  48. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/log.rst +0 -0
  49. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/mail.rst +0 -0
  50. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/message.rst +0 -0
  51. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/models.rst +0 -0
  52. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/operative_step.rst +0 -0
  53. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/pile.rst +0 -0
  54. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/processor.rst +0 -0
  55. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/progression.rst +0 -0
  56. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/service.rst +0 -0
  57. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/session.rst +0 -0
  58. {lionagi-0.8.2 → lionagi-0.8.3}/docs/modules/utils.rst +0 -0
  59. {lionagi-0.8.2 → lionagi-0.8.3}/docs/tutorials/get_started.rst +0 -0
  60. {lionagi-0.8.2 → lionagi-0.8.3}/docs/tutorials/get_started_pt2.rst +0 -0
  61. {lionagi-0.8.2 → lionagi-0.8.3}/docs/tutorials/get_started_pt3.rst +0 -0
  62. {lionagi-0.8.2 → lionagi-0.8.3}/docs/tutorials/index.rst +0 -0
  63. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/__init__.py +0 -0
  64. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/_class_registry.py +0 -0
  65. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/_errors.py +0 -0
  66. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/_types.py +0 -0
  67. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/__init__.py +0 -0
  68. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/file/__init__.py +0 -0
  69. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/file/chunk.py +0 -0
  70. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/file/file_ops.py +0 -0
  71. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/file/params.py +0 -0
  72. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/file/process.py +0 -0
  73. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/file/save.py +0 -0
  74. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/nested/__init__.py +0 -0
  75. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/nested/flatten.py +0 -0
  76. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/nested/nfilter.py +0 -0
  77. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/nested/nget.py +0 -0
  78. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/nested/ninsert.py +0 -0
  79. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/nested/nmerge.py +0 -0
  80. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/nested/npop.py +0 -0
  81. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/nested/nset.py +0 -0
  82. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/nested/unflatten.py +0 -0
  83. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/nested/utils.py +0 -0
  84. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/package/__init__.py +0 -0
  85. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/package/imports.py +0 -0
  86. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/package/management.py +0 -0
  87. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/package/params.py +0 -0
  88. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/package/system.py +0 -0
  89. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/parse.py +0 -0
  90. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/schema/__init__.py +0 -0
  91. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/schema/as_readable.py +0 -0
  92. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/schema/extract_code_block.py +0 -0
  93. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/schema/extract_docstring.py +0 -0
  94. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/schema/function_to_schema.py +0 -0
  95. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/schema/json_schema.py +0 -0
  96. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/token_transform/__init__.py +0 -0
  97. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/token_transform/llmlingua.py +0 -0
  98. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/token_transform/perplexity.py +0 -0
  99. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/token_transform/synthlang.py +0 -0
  100. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/validate/__init__.py +0 -0
  101. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/validate/common_field_validators.py +0 -0
  102. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/validate/fuzzy_match_keys.py +0 -0
  103. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/validate/fuzzy_validate_mapping.py +0 -0
  104. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/validate/string_similarity.py +0 -0
  105. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/libs/validate/validate_boolean.py +0 -0
  106. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/ReAct/__init__.py +0 -0
  107. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/__init__.py +0 -0
  108. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/_act/__init__.py +0 -0
  109. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/_act/act.py +0 -0
  110. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/brainstorm/__init__.py +0 -0
  111. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/brainstorm/brainstorm.py +0 -0
  112. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/brainstorm/prompt.py +0 -0
  113. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/chat/__init__.py +0 -0
  114. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/chat/chat.py +0 -0
  115. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/communicate/__init__.py +0 -0
  116. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/communicate/communicate.py +0 -0
  117. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/instruct/__init__.py +0 -0
  118. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/instruct/instruct.py +0 -0
  119. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/interpret/__init__.py +0 -0
  120. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/interpret/interpret.py +0 -0
  121. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/manager.py +0 -0
  122. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/operate/__init__.py +0 -0
  123. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/operate/operate.py +0 -0
  124. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/parse/__init__.py +0 -0
  125. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/parse/parse.py +0 -0
  126. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/plan/__init__.py +0 -0
  127. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/plan/plan.py +0 -0
  128. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/plan/prompt.py +0 -0
  129. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/select/__init__.py +0 -0
  130. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/select/select.py +0 -0
  131. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/select/utils.py +0 -0
  132. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/translate/__init__.py +0 -0
  133. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/translate/translate.py +0 -0
  134. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/types.py +0 -0
  135. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operations/utils.py +0 -0
  136. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/__init__.py +0 -0
  137. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/action/__init__.py +0 -0
  138. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/action/manager.py +0 -0
  139. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/action/request_response_model.py +0 -0
  140. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/action/utils.py +0 -0
  141. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/forms/__init__.py +0 -0
  142. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/forms/base.py +0 -0
  143. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/forms/flow.py +0 -0
  144. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/forms/form.py +0 -0
  145. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/forms/report.py +0 -0
  146. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/instruct/__init__.py +0 -0
  147. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/instruct/base.py +0 -0
  148. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/instruct/instruct.py +0 -0
  149. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/instruct/instruct_collection.py +0 -0
  150. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/instruct/node.py +0 -0
  151. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/instruct/prompts.py +0 -0
  152. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/instruct/reason.py +0 -0
  153. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/manager.py +0 -0
  154. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/models/__init__.py +0 -0
  155. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/models/field_model.py +0 -0
  156. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/models/model_params.py +0 -0
  157. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/models/note.py +0 -0
  158. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/models/operable_model.py +0 -0
  159. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/models/schema_model.py +0 -0
  160. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/operative.py +0 -0
  161. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/step.py +0 -0
  162. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/strategies/__init__.py +0 -0
  163. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/strategies/base.py +0 -0
  164. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/strategies/concurrent.py +0 -0
  165. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/strategies/concurrent_chunk.py +0 -0
  166. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/strategies/concurrent_sequential_chunk.py +0 -0
  167. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/strategies/params.py +0 -0
  168. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/strategies/sequential.py +0 -0
  169. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/strategies/sequential_chunk.py +0 -0
  170. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/strategies/sequential_concurrent_chunk.py +0 -0
  171. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/strategies/utils.py +0 -0
  172. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/operatives/types.py +0 -0
  173. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/__init__.py +0 -0
  174. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/_concepts.py +0 -0
  175. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/adapters/__init__.py +0 -0
  176. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/adapters/adapter.py +0 -0
  177. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/adapters/json_adapter.py +0 -0
  178. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/adapters/pandas_/__init__.py +0 -0
  179. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/adapters/pandas_/csv_adapter.py +0 -0
  180. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/adapters/pandas_/excel_adapter.py +0 -0
  181. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/adapters/pandas_/pd_dataframe_adapter.py +0 -0
  182. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/adapters/pandas_/pd_series_adapter.py +0 -0
  183. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/adapters/types.py +0 -0
  184. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/generic/__init__.py +0 -0
  185. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/generic/element.py +0 -0
  186. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/generic/event.py +0 -0
  187. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/generic/log.py +0 -0
  188. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/generic/pile.py +0 -0
  189. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/generic/processor.py +0 -0
  190. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/generic/progression.py +0 -0
  191. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/graph/__init__.py +0 -0
  192. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/graph/edge.py +0 -0
  193. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/graph/graph.py +0 -0
  194. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/graph/node.py +0 -0
  195. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/mail/__init__.py +0 -0
  196. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/mail/exchange.py +0 -0
  197. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/mail/mail.py +0 -0
  198. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/mail/mailbox.py +0 -0
  199. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/mail/manager.py +0 -0
  200. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/mail/package.py +0 -0
  201. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/messages/__init__.py +0 -0
  202. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/messages/action_request.py +0 -0
  203. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/messages/action_response.py +0 -0
  204. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/messages/assistant_response.py +0 -0
  205. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/messages/base.py +0 -0
  206. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/messages/manager.py +0 -0
  207. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/messages/message.py +0 -0
  208. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/messages/system.py +0 -0
  209. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/messages/templates/README.md +0 -0
  210. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
  211. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
  212. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
  213. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
  214. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
  215. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
  216. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/protocols/types.py +0 -0
  217. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/__init__.py +0 -0
  218. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/endpoints/__init__.py +0 -0
  219. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/endpoints/base.py +0 -0
  220. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/endpoints/chat_completion.py +0 -0
  221. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/endpoints/match_endpoint.py +0 -0
  222. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/endpoints/rate_limited_processor.py +0 -0
  223. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/endpoints/token_calculator.py +0 -0
  224. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/imodel.py +0 -0
  225. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/manager.py +0 -0
  226. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/providers/__init__.py +0 -0
  227. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/providers/anthropic_/__init__.py +0 -0
  228. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/providers/anthropic_/messages.py +0 -0
  229. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/providers/exa_/__init__.py +0 -0
  230. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/providers/exa_/models.py +0 -0
  231. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/providers/exa_/search.py +0 -0
  232. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/providers/exa_/types.py +0 -0
  233. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/providers/groq_/__init__.py +0 -0
  234. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/providers/groq_/chat_completions.py +0 -0
  235. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/providers/openai_/__init__.py +0 -0
  236. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/providers/openai_/chat_completions.py +0 -0
  237. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/providers/openrouter_/__init__.py +0 -0
  238. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/providers/openrouter_/chat_completions.py +0 -0
  239. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/providers/perplexity_/__init__.py +0 -0
  240. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/providers/perplexity_/chat_completions.py +0 -0
  241. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/providers/types.py +0 -0
  242. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/service/types.py +0 -0
  243. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/session/__init__.py +0 -0
  244. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/session/branch.py +0 -0
  245. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/session/session.py +0 -0
  246. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/settings.py +0 -0
  247. {lionagi-0.8.2 → lionagi-0.8.3}/lionagi/utils.py +0 -0
  248. {lionagi-0.8.2 → lionagi-0.8.3}/prompts/doc_style.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lionagi
3
- Version: 0.8.2
3
+ Version: 0.8.3
4
4
  Summary: An Intelligence Operating System.
5
5
  Author-email: HaiyangLi <quantocean.li@gmail.com>
6
6
  License: Apache License
@@ -11,6 +11,8 @@ from lionagi.operatives.types import Instruct
11
11
  from lionagi.service.imodel import iModel
12
12
  from lionagi.utils import copy
13
13
 
14
+ from .utils import ReActAnalysis
15
+
14
16
  if TYPE_CHECKING:
15
17
  from lionagi.session.branch import Branch
16
18
 
@@ -60,11 +62,9 @@ async def ReAct(
60
62
  kwargs_for_operate["actions"] = True
61
63
  kwargs_for_operate["reason"] = True
62
64
 
63
- # We'll pass the refined instruct_dict plus the user's other kwargs
64
- from .utils import ReActAnalysis
65
-
66
65
  # Step 1: Generate initial ReAct analysis
67
66
  analysis: ReActAnalysis = await branch.operate(
67
+ instruct=instruct_dict,
68
68
  response_format=ReActAnalysis,
69
69
  tools=tools,
70
70
  tool_schemas=tool_schemas,
@@ -83,7 +83,7 @@ async def ReAct(
83
83
  while (
84
84
  extension_allowed
85
85
  and analysis.extension_needed
86
- and (extensions if extensions else 1) > 0
86
+ and (extensions if max_extensions else 0) > 0
87
87
  ):
88
88
  new_instruction = None
89
89
  if extensions == max_extensions:
@@ -95,17 +95,13 @@ async def ReAct(
95
95
  extensions=extensions
96
96
  )
97
97
 
98
- # Each expansion uses a fresh copy of instruct_dict + forcibly "reason" + "actions"
99
- expanded_kwargs = copy(instruct_dict)
100
- expanded_kwargs["instruction"] = new_instruction
101
- expanded_kwargs["reason"] = True
102
- expanded_kwargs["actions"] = True
103
-
104
98
  analysis = await branch.operate(
99
+ instruction=new_instruction,
105
100
  response_format=ReActAnalysis,
106
101
  tools=tools,
107
102
  tool_schemas=tool_schemas,
108
- **expanded_kwargs,
103
+ reason=True,
104
+ actions=True,
109
105
  )
110
106
  analyses.append(analysis)
111
107
 
@@ -10,19 +10,19 @@ from pydantic import BaseModel, Field
10
10
  class ReActAnalysis(BaseModel):
11
11
 
12
12
  FIRST_EXT_PROMPT: ClassVar[str] = (
13
- "You are provided with another round to perform reason action to provide an accurate final answer. you have max another {extensions} rounds, set extension_needed to False if you are done and ready to provide final answer."
13
+ "You are provided with additional rounds to perform reason action to provide an accurate final answer. you have max another {extensions} rounds. Pleasen continue."
14
14
  )
15
15
 
16
16
  CONTINUE_EXT_PROMPT: ClassVar[str] = (
17
- "You are provided with another round, you have max another {extensions} rounds"
17
+ "You are provided with another round, you have max another {extensions} rounds. Please continue."
18
18
  )
19
19
 
20
20
  ANSWER_PROMPT: ClassVar[str] = (
21
- "given above reason and actions, please provide final answer to the original user request {instruction}"
21
+ "given above reason and actions, please provide final answer to the original user request:\n\n {instruction}"
22
22
  )
23
23
 
24
24
  analysis: str
25
25
  extension_needed: bool = Field(
26
26
  False,
27
- description="Set to True if more steps are needed to provide an accurate answer. If True, additional rounds are allowed.",
27
+ description="Set to True if more steps are needed to provide an accurate answer. If True, additional rounds are allowed. Typically should be set to true if more actions should be taken or planned to be taken. If false, will proceed to provide final answer next.",
28
28
  )
@@ -5,7 +5,7 @@
5
5
  import asyncio
6
6
  from typing import Any
7
7
 
8
- from pydantic import Field, model_validator
8
+ from pydantic import BaseModel, Field, field_validator, model_validator
9
9
  from typing_extensions import Self
10
10
 
11
11
  from lionagi.protocols.generic.event import Event, EventStatus
@@ -27,12 +27,22 @@ class FunctionCalling(Event):
27
27
  exclude=True,
28
28
  )
29
29
 
30
- arguments: dict[str, Any] = Field(
30
+ arguments: dict[str, Any] | BaseModel = Field(
31
31
  ..., description="Dictionary of arguments to pass to the function"
32
32
  )
33
33
 
34
+ @field_validator("arguments", mode="before")
35
+ def _validate_argument(cls, value):
36
+ if isinstance(value, BaseModel):
37
+ return value.model_dump(exclude_unset=True)
38
+ return value
39
+
34
40
  @model_validator(mode="after")
35
41
  def _validate_strict_tool(self) -> Self:
42
+ if self.func_tool.request_options:
43
+ args: BaseModel = self.func_tool.request_options(**self.arguments)
44
+ self.arguments = args.model_dump(exclude_unset=True)
45
+
36
46
  if self.func_tool.strict_func_call is True:
37
47
  if (
38
48
  not set(self.arguments.keys())
@@ -12,6 +12,7 @@ import inspect
12
12
  from collections.abc import Callable
13
13
  from typing import Any, TypeAlias
14
14
 
15
+ from openai import BaseModel
15
16
  from pydantic import Field, field_validator, model_validator
16
17
  from typing_extensions import Self
17
18
 
@@ -49,6 +50,11 @@ class Tool(Element):
49
50
  description="Schema describing the function's parameters and structure",
50
51
  )
51
52
 
53
+ request_options: type | None = Field(
54
+ default=None,
55
+ description="Optional Pydantic model for validating the function's input",
56
+ )
57
+
52
58
  preprocessor: Callable[[Any], Any] | None = Field(
53
59
  default=None,
54
60
  description="Optional function for preprocessing inputs before execution",
@@ -88,6 +94,11 @@ class Tool(Element):
88
94
  def _validate_tool_schema(self) -> Self:
89
95
  if self.tool_schema is None:
90
96
  self.tool_schema = function_to_schema(self.func_callable)
97
+ if self.request_options is not None:
98
+ schema_ = self.request_options.model_json_schema()
99
+ schema_.pop("title", None)
100
+ self.tool_schema["function"]["parameters"] = schema_
101
+
91
102
  return self
92
103
 
93
104
  @property
@@ -81,68 +81,121 @@ def format_text_item(item: Any) -> str:
81
81
 
82
82
  def format_text_content(content: dict) -> str:
83
83
  """
84
- Convert a dictionary with keys like 'guidance', 'instruction', 'context', etc.
85
- into a readable text block.
84
+ Convert a content dictionary into a minimal textual summary for LLM consumption.
86
85
 
87
- Args:
88
- content (dict): The content dictionary.
89
-
90
- Returns:
91
- str: A textual summary.
86
+ Emphasizes brevity and clarity:
87
+ - Skips empty or None fields.
88
+ - Bullet-points for lists.
89
+ - Key-value pairs for dicts.
90
+ - Minimal headings for known fields (guidance, instruction, etc.).
92
91
  """
93
- if "plain_content" in content and isinstance(
94
- content["plain_content"], str
95
- ):
96
- return content["plain_content"]
97
92
 
98
- msg = "\n---\n # Task\n"
93
+ if isinstance(content.get("plain_content"), str):
94
+ return content["plain_content"]
99
95
 
100
- for k in [
96
+ lines = []
97
+ # We only want minimal headings for certain known fields:
98
+ known_field_order = [
101
99
  "guidance",
102
100
  "instruction",
103
101
  "context",
104
102
  "tool_schemas",
105
103
  "respond_schema_info",
106
104
  "request_response_format",
107
- ]:
108
- if k in content:
109
- v = content[k]
110
-
111
- if k == "tool_schemas":
112
- if "tools" in v:
113
- v = v["tools"]
114
-
115
- if isinstance(v, list):
116
- z = []
117
- for idx, z_ in enumerate(v):
118
- if isinstance(z_, dict) and "function" in z_:
119
- z.append({f"Tool {idx+1}": z_["function"]})
120
- v = z
121
-
122
- if k == "request_response_format":
123
- k = "response format"
124
-
125
- if v not in [None, [], {}, UNDEFINED]:
126
- if isinstance(v, list):
127
- msg += f"## - **{k}**\n"
128
- for i in v:
129
- if (
130
- len(format_text_item(v).replace("\n", "").strip())
131
- > 0
132
- ):
133
- msg += format_text_item(i).strip()
134
- msg += "\n"
135
- else:
136
- if len(format_text_item(v).replace("\n", "").strip()) > 0:
137
- msg += (
138
- f"## - **{k}**\n{format_text_item(v).strip()}\n\n"
139
- )
140
-
141
- if not msg.endswith("\n\n"):
142
- msg += "\n\n---\n"
105
+ ]
106
+
107
+ # Render known fields in that order
108
+ for field in known_field_order:
109
+ if field in content:
110
+ val = content[field]
111
+ if _is_not_empty(val):
112
+ if field == "request_response_format":
113
+ field = "response format"
114
+ elif field == "respond_schema_info":
115
+ field = "response schema info"
116
+ lines.append(f"\n## {field.upper()}:\n")
117
+ rendered = _render_value(val)
118
+ # Indent or bullet the rendered result if multiline
119
+ # We'll keep it minimal: each line is prefixed with " ".
120
+ lines.extend(
121
+ f" {line}"
122
+ for line in rendered.split("\n")
123
+ if line.strip()
124
+ )
125
+
126
+ # Join all lines into a single string
127
+ return "\n".join(lines).strip()
128
+
129
+
130
+ def _render_value(val) -> str:
131
+ """
132
+ Render an arbitrary value (scalar, list, dict) in minimal form:
133
+ - Lists become bullet points.
134
+ - Dicts become key-value lines.
135
+ - Strings returned directly.
136
+ """
137
+ if isinstance(val, dict):
138
+ return _render_dict(val)
139
+ elif isinstance(val, list):
140
+ return _render_list(val)
143
141
  else:
144
- msg += "---\n"
145
- return msg
142
+ return str(val).strip()
143
+
144
+
145
+ def _render_dict(dct: dict) -> str:
146
+ """
147
+ Minimal bullet list for dictionary items:
148
+ key: rendered subvalue
149
+ """
150
+ lines = []
151
+ for k, v in dct.items():
152
+ if not _is_not_empty(v):
153
+ continue
154
+ subrendered = _render_value(v)
155
+ # Indent subrendered if multiline
156
+ sublines = subrendered.split("\n")
157
+ if len(sublines) == 1:
158
+ if sublines[0].startswith("- "):
159
+ lines.append(f"- {k}: {sublines[0][2:]}")
160
+ else:
161
+ lines.append(f"- {k}: {sublines[0]}")
162
+ else:
163
+ lines.append(f"- {k}:")
164
+ for s in sublines:
165
+ lines.append(f" {s}")
166
+ return "\n".join(lines)
167
+
168
+
169
+ def _render_list(lst: list) -> str:
170
+ """
171
+ Each item in the list gets a bullet. Nested structures are recursed.
172
+ """
173
+ lines = []
174
+ for idx, item in enumerate(lst, 1):
175
+ sub = _render_value(item)
176
+ sublines = sub.split("\n")
177
+ if len(sublines) == 1:
178
+ if sublines[0].startswith("- "):
179
+ lines.append(f"- {sublines[0][2:]}")
180
+ else:
181
+ lines.append(f"- {sublines[0]}")
182
+ else:
183
+ lines.append("-")
184
+ lines.extend(f" {s}" for s in sublines)
185
+ return "\n".join(lines)
186
+
187
+
188
+ def _is_not_empty(x) -> bool:
189
+ """
190
+ Returns True if x is neither None, nor empty string/list/dict.
191
+ """
192
+ if x is None:
193
+ return False
194
+ if isinstance(x, (list, dict)) and not x:
195
+ return False
196
+ if isinstance(x, str) and not x.strip():
197
+ return False
198
+ return True
146
199
 
147
200
 
148
201
  def format_image_content(
@@ -0,0 +1 @@
1
+ __version__ = "0.8.3"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "lionagi"
3
- version = "0.8.2"
3
+ version = "0.8.3"
4
4
  description = "An Intelligence Operating System."
5
5
  authors = [
6
6
  { name = "HaiyangLi", email = "quantocean.li@gmail.com" },
@@ -895,7 +895,7 @@ wheels = [
895
895
 
896
896
  [[package]]
897
897
  name = "lionagi"
898
- version = "0.8.2"
898
+ version = "0.8.3"
899
899
  source = { editable = "." }
900
900
  dependencies = [
901
901
  { name = "aiocache" },
@@ -1 +0,0 @@
1
- __version__ = "0.8.2"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes