lionagi 0.9.3__tar.gz → 0.9.4__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 (270) hide show
  1. {lionagi-0.9.3 → lionagi-0.9.4}/PKG-INFO +1 -1
  2. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/file/process.py +7 -1
  3. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/file/save.py +1 -0
  4. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/file/reader.py +72 -22
  5. lionagi-0.9.4/lionagi/tools/query/__init__.py +3 -0
  6. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/utils.py +6 -5
  7. lionagi-0.9.4/lionagi/version.py +1 -0
  8. {lionagi-0.9.3 → lionagi-0.9.4}/pyproject.toml +1 -1
  9. {lionagi-0.9.3 → lionagi-0.9.4}/uv.lock +1 -1
  10. lionagi-0.9.3/lionagi/version.py +0 -1
  11. {lionagi-0.9.3 → lionagi-0.9.4}/.env.example +0 -0
  12. {lionagi-0.9.3 → lionagi-0.9.4}/.github/FUNDING.yml +0 -0
  13. {lionagi-0.9.3 → lionagi-0.9.4}/.github/dependabot.yml +0 -0
  14. {lionagi-0.9.3 → lionagi-0.9.4}/.github/workflows/ci.yml +0 -0
  15. {lionagi-0.9.3 → lionagi-0.9.4}/.github/workflows/codeql.yml +0 -0
  16. {lionagi-0.9.3 → lionagi-0.9.4}/.github/workflows/docs.yml +0 -0
  17. {lionagi-0.9.3 → lionagi-0.9.4}/.github/workflows/release.yml +0 -0
  18. {lionagi-0.9.3 → lionagi-0.9.4}/.gitignore +0 -0
  19. {lionagi-0.9.3 → lionagi-0.9.4}/.pre-commit-config.yaml +0 -0
  20. {lionagi-0.9.3 → lionagi-0.9.4}/CODE_OF_CONDUCT.md +0 -0
  21. {lionagi-0.9.3 → lionagi-0.9.4}/CONTRIBUTING.md +0 -0
  22. {lionagi-0.9.3 → lionagi-0.9.4}/LICENSE +0 -0
  23. {lionagi-0.9.3 → lionagi-0.9.4}/README.md +0 -0
  24. {lionagi-0.9.3 → lionagi-0.9.4}/cookbooks/ch01_get_started.md +0 -0
  25. {lionagi-0.9.3 → lionagi-0.9.4}/cookbooks/ch02_concepts.md +0 -0
  26. {lionagi-0.9.3 → lionagi-0.9.4}/dev_tools/count_code_base_lines.py +0 -0
  27. {lionagi-0.9.3 → lionagi-0.9.4}/docs/Makefile +0 -0
  28. {lionagi-0.9.3 → lionagi-0.9.4}/docs/_static/custom.css +0 -0
  29. {lionagi-0.9.3 → lionagi-0.9.4}/docs/_templates/layout.html +0 -0
  30. {lionagi-0.9.3 → lionagi-0.9.4}/docs/conf.py +0 -0
  31. {lionagi-0.9.3 → lionagi-0.9.4}/docs/index.rst +0 -0
  32. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/action.rst +0 -0
  33. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/adapter.rst +0 -0
  34. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/branch.rst +0 -0
  35. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/branch_operations.rst +0 -0
  36. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/concepts.rst +0 -0
  37. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/element_id.rst +0 -0
  38. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/event.rst +0 -0
  39. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/form.rst +0 -0
  40. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/graph.rst +0 -0
  41. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/index.rst +0 -0
  42. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/instruct.rst +0 -0
  43. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/lib_file.rst +0 -0
  44. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/lib_nested.rst +0 -0
  45. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/lib_package.rst +0 -0
  46. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/lib_schema.rst +0 -0
  47. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/lib_validate.rst +0 -0
  48. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/log.rst +0 -0
  49. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/mail.rst +0 -0
  50. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/message.rst +0 -0
  51. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/models.rst +0 -0
  52. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/operative_step.rst +0 -0
  53. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/pile.rst +0 -0
  54. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/processor.rst +0 -0
  55. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/progression.rst +0 -0
  56. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/service.rst +0 -0
  57. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/session.rst +0 -0
  58. {lionagi-0.9.3 → lionagi-0.9.4}/docs/modules/utils.rst +0 -0
  59. {lionagi-0.9.3 → lionagi-0.9.4}/docs/tutorials/get_started.rst +0 -0
  60. {lionagi-0.9.3 → lionagi-0.9.4}/docs/tutorials/get_started_pt2.rst +0 -0
  61. {lionagi-0.9.3 → lionagi-0.9.4}/docs/tutorials/get_started_pt3.rst +0 -0
  62. {lionagi-0.9.3 → lionagi-0.9.4}/docs/tutorials/index.rst +0 -0
  63. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/__init__.py +0 -0
  64. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/_class_registry.py +0 -0
  65. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/_errors.py +0 -0
  66. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/_types.py +0 -0
  67. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/__init__.py +0 -0
  68. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/file/__init__.py +0 -0
  69. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/file/chunk.py +0 -0
  70. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/file/file_ops.py +0 -0
  71. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/file/params.py +0 -0
  72. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/__init__.py +0 -0
  73. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/flatten.py +0 -0
  74. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/nfilter.py +0 -0
  75. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/nget.py +0 -0
  76. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/ninsert.py +0 -0
  77. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/nmerge.py +0 -0
  78. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/npop.py +0 -0
  79. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/nset.py +0 -0
  80. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/unflatten.py +0 -0
  81. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/nested/utils.py +0 -0
  82. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/package/__init__.py +0 -0
  83. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/package/imports.py +0 -0
  84. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/package/management.py +0 -0
  85. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/package/params.py +0 -0
  86. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/package/system.py +0 -0
  87. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/parse.py +0 -0
  88. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/schema/__init__.py +0 -0
  89. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/schema/as_readable.py +0 -0
  90. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/schema/extract_code_block.py +0 -0
  91. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/schema/extract_docstring.py +0 -0
  92. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/schema/function_to_schema.py +0 -0
  93. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/schema/json_schema.py +0 -0
  94. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/token_transform/__init__.py +0 -0
  95. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/token_transform/llmlingua.py +0 -0
  96. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/token_transform/perplexity.py +0 -0
  97. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/token_transform/synthlang.py +0 -0
  98. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/validate/__init__.py +0 -0
  99. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/validate/common_field_validators.py +0 -0
  100. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/validate/fuzzy_match_keys.py +0 -0
  101. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/validate/fuzzy_validate_mapping.py +0 -0
  102. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/validate/string_similarity.py +0 -0
  103. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/libs/validate/validate_boolean.py +0 -0
  104. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/ReAct/ReAct.py +0 -0
  105. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/ReAct/__init__.py +0 -0
  106. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/ReAct/utils.py +0 -0
  107. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/__init__.py +0 -0
  108. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/_act/__init__.py +0 -0
  109. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/_act/act.py +0 -0
  110. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/brainstorm/__init__.py +0 -0
  111. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/brainstorm/brainstorm.py +0 -0
  112. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/brainstorm/prompt.py +0 -0
  113. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/chat/__init__.py +0 -0
  114. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/chat/chat.py +0 -0
  115. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/communicate/__init__.py +0 -0
  116. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/communicate/communicate.py +0 -0
  117. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/instruct/__init__.py +0 -0
  118. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/instruct/instruct.py +0 -0
  119. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/interpret/__init__.py +0 -0
  120. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/interpret/interpret.py +0 -0
  121. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/manager.py +0 -0
  122. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/operate/__init__.py +0 -0
  123. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/operate/operate.py +0 -0
  124. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/parse/__init__.py +0 -0
  125. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/parse/parse.py +0 -0
  126. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/plan/__init__.py +0 -0
  127. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/plan/plan.py +0 -0
  128. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/plan/prompt.py +0 -0
  129. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/select/__init__.py +0 -0
  130. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/select/select.py +0 -0
  131. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/select/utils.py +0 -0
  132. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/translate/__init__.py +0 -0
  133. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/translate/translate.py +0 -0
  134. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/types.py +0 -0
  135. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operations/utils.py +0 -0
  136. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/__init__.py +0 -0
  137. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/action/__init__.py +0 -0
  138. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/action/function_calling.py +0 -0
  139. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/action/manager.py +0 -0
  140. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/action/request_response_model.py +0 -0
  141. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/action/tool.py +0 -0
  142. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/action/utils.py +0 -0
  143. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/forms/__init__.py +0 -0
  144. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/forms/base.py +0 -0
  145. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/forms/flow.py +0 -0
  146. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/forms/form.py +0 -0
  147. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/forms/report.py +0 -0
  148. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/instruct/__init__.py +0 -0
  149. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/instruct/base.py +0 -0
  150. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/instruct/instruct.py +0 -0
  151. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/instruct/instruct_collection.py +0 -0
  152. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/instruct/node.py +0 -0
  153. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/instruct/prompts.py +0 -0
  154. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/instruct/reason.py +0 -0
  155. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/manager.py +0 -0
  156. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/models/__init__.py +0 -0
  157. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/models/field_model.py +0 -0
  158. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/models/model_params.py +0 -0
  159. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/models/note.py +0 -0
  160. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/models/operable_model.py +0 -0
  161. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/models/schema_model.py +0 -0
  162. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/operative.py +0 -0
  163. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/step.py +0 -0
  164. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/__init__.py +0 -0
  165. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/base.py +0 -0
  166. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/concurrent.py +0 -0
  167. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/concurrent_chunk.py +0 -0
  168. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/concurrent_sequential_chunk.py +0 -0
  169. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/params.py +0 -0
  170. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/sequential.py +0 -0
  171. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/sequential_chunk.py +0 -0
  172. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/sequential_concurrent_chunk.py +0 -0
  173. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/strategies/utils.py +0 -0
  174. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/operatives/types.py +0 -0
  175. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/__init__.py +0 -0
  176. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/_concepts.py +0 -0
  177. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/__init__.py +0 -0
  178. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/adapter.py +0 -0
  179. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/json_adapter.py +0 -0
  180. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/pandas_/__init__.py +0 -0
  181. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/pandas_/csv_adapter.py +0 -0
  182. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/pandas_/excel_adapter.py +0 -0
  183. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/pandas_/pd_dataframe_adapter.py +0 -0
  184. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/pandas_/pd_series_adapter.py +0 -0
  185. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/adapters/types.py +0 -0
  186. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/generic/__init__.py +0 -0
  187. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/generic/element.py +0 -0
  188. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/generic/event.py +0 -0
  189. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/generic/log.py +0 -0
  190. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/generic/pile.py +0 -0
  191. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/generic/processor.py +0 -0
  192. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/generic/progression.py +0 -0
  193. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/graph/__init__.py +0 -0
  194. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/graph/edge.py +0 -0
  195. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/graph/graph.py +0 -0
  196. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/graph/node.py +0 -0
  197. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/mail/__init__.py +0 -0
  198. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/mail/exchange.py +0 -0
  199. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/mail/mail.py +0 -0
  200. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/mail/mailbox.py +0 -0
  201. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/mail/manager.py +0 -0
  202. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/mail/package.py +0 -0
  203. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/__init__.py +0 -0
  204. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/action_request.py +0 -0
  205. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/action_response.py +0 -0
  206. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/assistant_response.py +0 -0
  207. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/base.py +0 -0
  208. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/instruction.py +0 -0
  209. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/manager.py +0 -0
  210. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/message.py +0 -0
  211. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/system.py +0 -0
  212. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/templates/README.md +0 -0
  213. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/templates/action_request.jinja2 +0 -0
  214. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/templates/action_response.jinja2 +0 -0
  215. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/templates/assistant_response.jinja2 +0 -0
  216. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/templates/instruction_message.jinja2 +0 -0
  217. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/templates/system_message.jinja2 +0 -0
  218. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/messages/templates/tool_schemas.jinja2 +0 -0
  219. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/protocols/types.py +0 -0
  220. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/__init__.py +0 -0
  221. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/endpoints/__init__.py +0 -0
  222. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/endpoints/base.py +0 -0
  223. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/endpoints/chat_completion.py +0 -0
  224. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/endpoints/match_endpoint.py +0 -0
  225. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/endpoints/rate_limited_processor.py +0 -0
  226. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/endpoints/token_calculator.py +0 -0
  227. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/imodel.py +0 -0
  228. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/manager.py +0 -0
  229. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/__init__.py +0 -0
  230. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/anthropic_/__init__.py +0 -0
  231. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/anthropic_/messages.py +0 -0
  232. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/exa_/__init__.py +0 -0
  233. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/exa_/models.py +0 -0
  234. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/exa_/search.py +0 -0
  235. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/exa_/types.py +0 -0
  236. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/groq_/__init__.py +0 -0
  237. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/groq_/chat_completions.py +0 -0
  238. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/openai_/__init__.py +0 -0
  239. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/openai_/chat_completions.py +0 -0
  240. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/openrouter_/__init__.py +0 -0
  241. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/openrouter_/chat_completions.py +0 -0
  242. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/perplexity_/__init__.py +0 -0
  243. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/perplexity_/chat_completions.py +0 -0
  244. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/perplexity_/models.py +0 -0
  245. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/providers/types.py +0 -0
  246. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/service/types.py +0 -0
  247. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/session/__init__.py +0 -0
  248. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/session/branch.py +0 -0
  249. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/session/prompts.py +0 -0
  250. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/session/session.py +0 -0
  251. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/settings.py +0 -0
  252. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/__init__.py +0 -0
  253. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/base.py +0 -0
  254. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/browser/__init__.py +0 -0
  255. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/browser/providers/__init__.py +0 -0
  256. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/browser/providers/browser_use_.py +0 -0
  257. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/code/__init__.py +0 -0
  258. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/code/coder.py +0 -0
  259. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/code/manager.py +0 -0
  260. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/code/providers/__init__.py +0 -0
  261. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/code/providers/aider_.py +0 -0
  262. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/code/providers/e2b_.py +0 -0
  263. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/code/sandbox.py +0 -0
  264. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/file/__init__.py +0 -0
  265. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/file/manager.py +0 -0
  266. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/file/providers/__init__.py +0 -0
  267. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/file/providers/docling_.py +0 -0
  268. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/file/writer.py +0 -0
  269. {lionagi-0.9.3 → lionagi-0.9.4}/lionagi/tools/types.py +0 -0
  270. {lionagi-0.9.3 → lionagi-0.9.4}/prompts/doc_style.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lionagi
3
- Version: 0.9.3
3
+ Version: 0.9.4
4
4
  Summary: An Intelligence Operating System.
5
5
  Author-email: HaiyangLi <quantocean.li@gmail.com>
6
6
  License: Apache License
@@ -18,6 +18,7 @@ def dir_to_files(
18
18
  max_workers: int | None = None,
19
19
  ignore_errors: bool = False,
20
20
  verbose: bool = False,
21
+ recursive: bool = False,
21
22
  ) -> list[Path]:
22
23
  """
23
24
  Recursively process a directory and return a list of file paths.
@@ -33,6 +34,8 @@ def dir_to_files(
33
34
  If None, uses the default ThreadPoolExecutor behavior.
34
35
  ignore_errors (bool): If True, log warnings for errors instead of raising exceptions.
35
36
  verbose (bool): If True, print verbose output.
37
+ recursive (bool): If True, process directories recursively (the default).
38
+ If False, only process files in the top-level directory.
36
39
 
37
40
  Returns:
38
41
  List[Path]: A list of Path objects representing the files found.
@@ -58,11 +61,14 @@ def dir_to_files(
58
61
  raise ValueError(f"Error processing {file_path}: {e}") from e
59
62
  return None
60
63
 
64
+ file_iterator = (
65
+ directory_path.rglob("*") if recursive else directory_path.glob("*")
66
+ )
61
67
  try:
62
68
  with ThreadPoolExecutor(max_workers=max_workers) as executor:
63
69
  futures = [
64
70
  executor.submit(process_file, f)
65
- for f in directory_path.rglob("*")
71
+ for f in file_iterator
66
72
  if f.is_file()
67
73
  ]
68
74
  files = [
@@ -60,6 +60,7 @@ def save_to_file(
60
60
  )
61
61
  with file_path.open("w", encoding="utf-8") as file:
62
62
  file.write(text)
63
+ file.close()
63
64
  if verbose:
64
65
  logging.info(f"Text saved to: {file_path}")
65
66
  return file_path
@@ -8,6 +8,7 @@ from enum import Enum
8
8
  from pydantic import BaseModel, Field, model_validator
9
9
 
10
10
  from lionagi.operatives.action.tool import Tool
11
+ from lionagi.service.endpoints.token_calculator import TokenCalculator
11
12
  from lionagi.utils import to_num
12
13
 
13
14
  from ..base import LionTool
@@ -18,10 +19,12 @@ class ReaderAction(str, Enum):
18
19
  This enumeration indicates the *type* of action the LLM wants to perform.
19
20
  - 'open': Convert a file/URL to text and store it internally for partial reads
20
21
  - 'read': Return a partial slice of the already-opened doc
22
+ - 'list_dir': List all files in a directory and store it internally for partial reads
21
23
  """
22
24
 
23
25
  open = "open"
24
26
  read = "read"
27
+ list_dir = "list_dir"
25
28
 
26
29
 
27
30
  class ReaderRequest(BaseModel):
@@ -39,6 +42,7 @@ class ReaderRequest(BaseModel):
39
42
  "Action to perform. Must be one of: "
40
43
  "- 'open': Convert a file/URL to text and store it internally for partial reads. "
41
44
  "- 'read': Return a partial slice of the already-opened doc."
45
+ "- 'list_dir': List all files in a directory."
42
46
  ),
43
47
  )
44
48
 
@@ -54,7 +58,8 @@ class ReaderRequest(BaseModel):
54
58
  None,
55
59
  description=(
56
60
  "Unique ID referencing a previously opened document. "
57
- "This field is REQUIRED if action='read'. If action='open', leave it None."
61
+ "This field is REQUIRED if action='read'. Else leave it None."
62
+ "this field starts with 'DOC_' for document and 'DIR_' for directory listing."
58
63
  ),
59
64
  )
60
65
 
@@ -74,6 +79,22 @@ class ReaderRequest(BaseModel):
74
79
  ),
75
80
  )
76
81
 
82
+ recursive: bool = Field(
83
+ False,
84
+ description=(
85
+ "Whether to recursively list files in subdirectories. Defaults to False."
86
+ "Only used if action='list_dir'."
87
+ ),
88
+ )
89
+
90
+ file_types: list[str] | None = Field(
91
+ None,
92
+ description=(
93
+ "List files with specific extensions. "
94
+ "If omitted or None, list all files. Only used if action='list_dir'."
95
+ ),
96
+ )
97
+
77
98
  @model_validator(mode="before")
78
99
  def _validate_request(cls, values):
79
100
  for k, v in values.items():
@@ -96,6 +117,7 @@ class DocumentInfo(BaseModel):
96
117
 
97
118
  doc_id: str
98
119
  length: int | None = None
120
+ num_tokens: int | None = None
99
121
 
100
122
 
101
123
  class PartialChunk(BaseModel):
@@ -150,17 +172,17 @@ class ReaderTool(LionTool):
150
172
  is_lion_system_tool = True
151
173
  system_tool_name = "reader_tool"
152
174
 
153
- from lionagi.libs.package.imports import check_import
175
+ def __init__(self):
176
+ from lionagi.libs.package.imports import check_import
154
177
 
155
- DocumentConverter = check_import(
156
- "docling",
157
- module_name="document_converter",
158
- import_name="DocumentConverter",
159
- )
178
+ DocumentConverter = check_import(
179
+ "docling",
180
+ module_name="document_converter",
181
+ import_name="DocumentConverter",
182
+ )
160
183
 
161
- def __init__(self):
162
184
  super().__init__()
163
- self.converter = ReaderTool.DocumentConverter()
185
+ self.converter = DocumentConverter()
164
186
  self.documents = {} # doc_id -> (temp_file_path, doc_length)
165
187
  self._tool = None
166
188
 
@@ -174,23 +196,18 @@ class ReaderTool(LionTool):
174
196
  request = ReaderRequest(**request)
175
197
  if request.action == "open":
176
198
  return self._open_doc(request.path_or_url)
177
- elif request.action == "read":
199
+ if request.action == "read":
178
200
  return self._read_doc(
179
201
  request.doc_id, request.start_offset, request.end_offset
180
202
  )
203
+ if request.action == "list_dir":
204
+ return self._list_dir(
205
+ request.path_or_url, request.recursive, request.file_types
206
+ )
181
207
  else:
182
208
  return ReaderResponse(success=False, error="Unknown action type")
183
209
 
184
- def _open_doc(self, source: str) -> ReaderResponse:
185
- try:
186
- result = self.converter.convert(source)
187
- text = result.document.export_to_markdown()
188
- except Exception as e:
189
- return ReaderResponse(
190
- success=False, error=f"Conversion error: {str(e)}"
191
- )
192
-
193
- doc_id = f"DOC_{abs(hash(source))}"
210
+ def _save_to_temp(self, text, doc_id):
194
211
  temp_file = tempfile.NamedTemporaryFile(
195
212
  delete=False, mode="w", encoding="utf-8"
196
213
  )
@@ -202,9 +219,26 @@ class ReaderTool(LionTool):
202
219
  self.documents[doc_id] = (temp_file.name, doc_len)
203
220
 
204
221
  return ReaderResponse(
205
- success=True, doc_info=DocumentInfo(doc_id=doc_id, length=doc_len)
222
+ success=True,
223
+ doc_info=DocumentInfo(
224
+ doc_id=doc_id,
225
+ length=doc_len,
226
+ num_tokens=TokenCalculator.tokenize(text),
227
+ ),
206
228
  )
207
229
 
230
+ def _open_doc(self, source: str) -> ReaderResponse:
231
+ try:
232
+ result = self.converter.convert(source)
233
+ text = result.document.export_to_markdown()
234
+ except Exception as e:
235
+ return ReaderResponse(
236
+ success=False, error=f"Conversion error: {str(e)}"
237
+ )
238
+
239
+ doc_id = f"DOC_{abs(hash(source))}"
240
+ return self._save_to_temp(text, doc_id)
241
+
208
242
  def _read_doc(self, doc_id: str, start: int, end: int) -> ReaderResponse:
209
243
  if doc_id not in self.documents:
210
244
  return ReaderResponse(
@@ -230,14 +264,30 @@ class ReaderTool(LionTool):
230
264
  chunk=PartialChunk(start_offset=s, end_offset=e, content=content),
231
265
  )
232
266
 
267
+ def _list_dir(
268
+ self,
269
+ directory: str,
270
+ recursive: bool = False,
271
+ file_types: list[str] | None = None,
272
+ ):
273
+ from lionagi.libs.file.process import dir_to_files
274
+
275
+ files = dir_to_files(
276
+ directory, recursive=recursive, file_types=file_types
277
+ )
278
+ files = "\n".join([str(f) for f in files])
279
+ doc_id = f"DIR_{abs(hash(directory))}"
280
+ return self._save_to_temp(files, doc_id)
281
+
233
282
  def to_tool(self):
234
283
  if self._tool is None:
235
284
 
236
285
  def reader_tool(**kwargs):
237
286
  """
238
- A function that takes ReaderRequest to either:
287
+ A function that takes ReaderRequest to do one of:
239
288
  - open a doc (File/URL) -> returns doc_id, doc length
240
289
  - read partial text from doc -> returns chunk
290
+ - list all files in a directory -> returns list of files as doc format
241
291
  """
242
292
  return self.handle_request(
243
293
  ReaderRequest(**kwargs)
@@ -0,0 +1,3 @@
1
+ # Copyright (c) 2023 - 2025, HaiyangLi <quantocean.li at gmail dot com>
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
@@ -1022,10 +1022,14 @@ def create_path(
1022
1022
  The full Path to the new or existing file.
1023
1023
 
1024
1024
  Raises:
1025
- ValueError: If no extension or filename invalid.
1025
+ ValueError: If filename is invalid.
1026
1026
  FileExistsError: If file exists and file_exist_ok=False.
1027
1027
  """
1028
- if "/" in filename or "\\" in filename:
1028
+ if "/" in filename:
1029
+ sub_dir, filename = filename.split("/")[:-1], filename.split("/")[-1]
1030
+ directory = Path(directory) / "/".join(sub_dir)
1031
+
1032
+ if "\\" in filename:
1029
1033
  raise ValueError("Filename cannot contain directory separators.")
1030
1034
 
1031
1035
  directory = Path(directory)
@@ -1036,9 +1040,6 @@ def create_path(
1036
1040
  else:
1037
1041
  name, ext = filename, extension
1038
1042
 
1039
- if not ext:
1040
- raise ValueError("No extension provided for filename.")
1041
-
1042
1043
  # Ensure extension has a single leading dot
1043
1044
  ext = f".{ext.lstrip('.')}" if ext else ""
1044
1045
 
@@ -0,0 +1 @@
1
+ __version__ = "0.9.4"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "lionagi"
3
- version = "0.9.3"
3
+ version = "0.9.4"
4
4
  description = "An Intelligence Operating System."
5
5
  authors = [
6
6
  { name = "HaiyangLi", email = "quantocean.li@gmail.com" },
@@ -1208,7 +1208,7 @@ wheels = [
1208
1208
 
1209
1209
  [[package]]
1210
1210
  name = "lionagi"
1211
- version = "0.9.3"
1211
+ version = "0.9.4"
1212
1212
  source = { editable = "." }
1213
1213
  dependencies = [
1214
1214
  { name = "aiocache" },
@@ -1 +0,0 @@
1
- __version__ = "0.9.3"
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