lionagi 0.4.0__py3-none-any.whl → 0.5.1__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (584) hide show
  1. lionagi/__init__.py +14 -46
  2. lionagi/core/__init__.py +3 -1
  3. lionagi/core/_class_registry.py +69 -0
  4. lionagi/core/action/__init__.py +3 -13
  5. lionagi/core/action/action_manager.py +287 -0
  6. lionagi/core/action/base.py +109 -0
  7. lionagi/core/action/function_calling.py +127 -92
  8. lionagi/core/action/tool.py +172 -70
  9. lionagi/core/action/types.py +16 -0
  10. lionagi/core/communication/__init__.py +3 -0
  11. lionagi/core/communication/action_request.py +163 -0
  12. lionagi/core/communication/action_response.py +149 -0
  13. lionagi/core/communication/assistant_response.py +161 -0
  14. lionagi/core/communication/base_mail.py +49 -0
  15. lionagi/core/communication/instruction.py +376 -0
  16. lionagi/core/communication/message.py +286 -0
  17. lionagi/core/communication/message_manager.py +530 -0
  18. lionagi/core/communication/system.py +116 -0
  19. lionagi/core/communication/templates/README.md +28 -0
  20. lionagi/core/communication/templates/action_request.jinja2 +5 -0
  21. lionagi/core/communication/templates/action_response.jinja2 +9 -0
  22. lionagi/core/communication/templates/assistant_response.jinja2 +2 -0
  23. lionagi/core/communication/templates/instruction_message.jinja2 +61 -0
  24. lionagi/core/communication/templates/system_message.jinja2 +11 -0
  25. lionagi/core/communication/templates/tool_schemas.jinja2 +7 -0
  26. lionagi/core/communication/types.py +27 -0
  27. lionagi/core/communication/utils.py +254 -0
  28. lionagi/core/forms/__init__.py +3 -0
  29. lionagi/core/forms/base.py +232 -0
  30. lionagi/core/forms/form.py +791 -0
  31. lionagi/core/forms/report.py +321 -0
  32. lionagi/core/forms/types.py +13 -0
  33. lionagi/core/forms/utils.py +26 -0
  34. lionagi/core/generic/__init__.py +3 -6
  35. lionagi/core/generic/component.py +422 -0
  36. lionagi/core/generic/edge.py +143 -101
  37. lionagi/core/generic/element.py +195 -0
  38. lionagi/core/generic/graph.py +297 -180
  39. lionagi/core/generic/log.py +151 -0
  40. lionagi/core/generic/log_manager.py +320 -0
  41. lionagi/core/generic/node.py +7 -229
  42. lionagi/core/generic/pile.py +1017 -0
  43. lionagi/core/generic/progression.py +388 -0
  44. lionagi/core/generic/types.py +23 -0
  45. lionagi/core/generic/utils.py +50 -0
  46. lionagi/core/models/__init__.py +5 -0
  47. lionagi/core/models/base.py +85 -0
  48. lionagi/core/models/field_model.py +122 -0
  49. lionagi/core/models/new_model_params.py +195 -0
  50. lionagi/core/models/note.py +351 -0
  51. lionagi/core/models/operable_model.py +392 -0
  52. lionagi/core/models/schema_model.py +50 -0
  53. lionagi/core/models/types.py +10 -0
  54. lionagi/core/session/__init__.py +3 -0
  55. lionagi/core/session/branch.py +115 -415
  56. lionagi/core/session/branch_mixins.py +545 -0
  57. lionagi/core/session/session.py +122 -257
  58. lionagi/core/session/types.py +8 -0
  59. lionagi/core/typing/__init__.py +9 -0
  60. lionagi/core/typing/concepts.py +132 -0
  61. lionagi/core/typing/config.py +15 -0
  62. lionagi/core/typing/id.py +221 -0
  63. lionagi/core/typing/pydantic_.py +33 -0
  64. lionagi/core/typing/typing_.py +54 -0
  65. lionagi/integrations/__init__.py +0 -1
  66. lionagi/integrations/anthropic_/AnthropicModel.py +268 -0
  67. lionagi/integrations/anthropic_/AnthropicService.py +117 -0
  68. lionagi/integrations/anthropic_/__init__.py +3 -0
  69. lionagi/integrations/anthropic_/anthropic_max_output_token_data.yaml +7 -0
  70. lionagi/integrations/anthropic_/anthropic_price_data.yaml +14 -0
  71. lionagi/integrations/anthropic_/api_endpoints/__init__.py +3 -0
  72. lionagi/integrations/anthropic_/api_endpoints/api_request.py +277 -0
  73. lionagi/integrations/anthropic_/api_endpoints/data_models.py +40 -0
  74. lionagi/integrations/anthropic_/api_endpoints/match_response.py +119 -0
  75. lionagi/integrations/anthropic_/api_endpoints/messages/__init__.py +3 -0
  76. lionagi/integrations/anthropic_/api_endpoints/messages/request/__init__.py +3 -0
  77. lionagi/integrations/anthropic_/api_endpoints/messages/request/message_models.py +14 -0
  78. lionagi/integrations/anthropic_/api_endpoints/messages/request/request_body.py +74 -0
  79. lionagi/integrations/anthropic_/api_endpoints/messages/response/content_models.py +32 -0
  80. lionagi/integrations/anthropic_/api_endpoints/messages/response/response_body.py +101 -0
  81. lionagi/integrations/anthropic_/api_endpoints/messages/response/usage_models.py +25 -0
  82. lionagi/integrations/anthropic_/version.py +5 -0
  83. lionagi/integrations/groq_/GroqModel.py +318 -0
  84. lionagi/integrations/groq_/GroqService.py +151 -0
  85. lionagi/integrations/groq_/__init__.py +3 -0
  86. lionagi/integrations/groq_/api_endpoints/data_models.py +187 -0
  87. lionagi/integrations/groq_/api_endpoints/groq_request.py +288 -0
  88. lionagi/integrations/groq_/api_endpoints/match_response.py +106 -0
  89. lionagi/integrations/groq_/api_endpoints/response_utils.py +105 -0
  90. lionagi/integrations/groq_/groq_max_output_token_data.yaml +21 -0
  91. lionagi/integrations/groq_/groq_price_data.yaml +58 -0
  92. lionagi/integrations/groq_/groq_rate_limits.yaml +105 -0
  93. lionagi/integrations/groq_/version.py +5 -0
  94. lionagi/integrations/litellm_/__init__.py +3 -0
  95. lionagi/integrations/litellm_/imodel.py +73 -0
  96. lionagi/integrations/ollama_/OllamaModel.py +244 -0
  97. lionagi/integrations/ollama_/OllamaService.py +142 -0
  98. lionagi/integrations/ollama_/__init__.py +3 -0
  99. lionagi/integrations/ollama_/api_endpoints/__init__.py +3 -0
  100. lionagi/integrations/ollama_/api_endpoints/api_request.py +179 -0
  101. lionagi/integrations/ollama_/api_endpoints/chat_completion/__init__.py +3 -0
  102. lionagi/integrations/ollama_/api_endpoints/chat_completion/message_models.py +31 -0
  103. lionagi/integrations/ollama_/api_endpoints/chat_completion/request_body.py +46 -0
  104. lionagi/integrations/ollama_/api_endpoints/chat_completion/response_body.py +67 -0
  105. lionagi/integrations/ollama_/api_endpoints/chat_completion/tool_models.py +49 -0
  106. lionagi/integrations/ollama_/api_endpoints/completion/request_body.py +72 -0
  107. lionagi/integrations/ollama_/api_endpoints/completion/response_body.py +59 -0
  108. lionagi/integrations/ollama_/api_endpoints/data_models.py +15 -0
  109. lionagi/integrations/ollama_/api_endpoints/embedding/request_body.py +33 -0
  110. lionagi/integrations/ollama_/api_endpoints/embedding/response_body.py +29 -0
  111. lionagi/integrations/ollama_/api_endpoints/match_data_model.py +62 -0
  112. lionagi/integrations/ollama_/api_endpoints/match_response.py +190 -0
  113. lionagi/integrations/ollama_/api_endpoints/model/__init__.py +3 -0
  114. lionagi/integrations/ollama_/api_endpoints/model/copy_model.py +13 -0
  115. lionagi/integrations/ollama_/api_endpoints/model/create_model.py +28 -0
  116. lionagi/integrations/ollama_/api_endpoints/model/delete_model.py +11 -0
  117. lionagi/integrations/ollama_/api_endpoints/model/list_model.py +60 -0
  118. lionagi/integrations/ollama_/api_endpoints/model/pull_model.py +34 -0
  119. lionagi/integrations/ollama_/api_endpoints/model/push_model.py +35 -0
  120. lionagi/integrations/ollama_/api_endpoints/model/show_model.py +36 -0
  121. lionagi/integrations/ollama_/api_endpoints/option_models.py +68 -0
  122. lionagi/integrations/openai_/OpenAIModel.py +418 -0
  123. lionagi/integrations/openai_/OpenAIService.py +426 -0
  124. lionagi/integrations/openai_/api_endpoints/__init__.py +3 -0
  125. lionagi/integrations/openai_/api_endpoints/api_request.py +277 -0
  126. lionagi/integrations/openai_/api_endpoints/audio/__init__.py +9 -0
  127. lionagi/integrations/openai_/api_endpoints/audio/speech_models.py +34 -0
  128. lionagi/integrations/openai_/api_endpoints/audio/transcription_models.py +136 -0
  129. lionagi/integrations/openai_/api_endpoints/audio/translation_models.py +41 -0
  130. lionagi/integrations/openai_/api_endpoints/audio/types.py +41 -0
  131. lionagi/integrations/openai_/api_endpoints/batch/__init__.py +17 -0
  132. lionagi/integrations/openai_/api_endpoints/batch/batch_models.py +146 -0
  133. lionagi/integrations/openai_/api_endpoints/batch/cancel_batch.py +7 -0
  134. lionagi/integrations/openai_/api_endpoints/batch/create_batch.py +26 -0
  135. lionagi/integrations/openai_/api_endpoints/batch/list_batch.py +37 -0
  136. lionagi/integrations/openai_/api_endpoints/batch/request_object_models.py +65 -0
  137. lionagi/integrations/openai_/api_endpoints/batch/retrieve_batch.py +7 -0
  138. lionagi/integrations/openai_/api_endpoints/batch/types.py +4 -0
  139. lionagi/integrations/openai_/api_endpoints/chat_completions/__init__.py +1 -0
  140. lionagi/integrations/openai_/api_endpoints/chat_completions/request/__init__.py +39 -0
  141. lionagi/integrations/openai_/api_endpoints/chat_completions/request/message_models.py +121 -0
  142. lionagi/integrations/openai_/api_endpoints/chat_completions/request/request_body.py +221 -0
  143. lionagi/integrations/openai_/api_endpoints/chat_completions/request/response_format.py +71 -0
  144. lionagi/integrations/openai_/api_endpoints/chat_completions/request/stream_options.py +14 -0
  145. lionagi/integrations/openai_/api_endpoints/chat_completions/request/tool_choice_models.py +17 -0
  146. lionagi/integrations/openai_/api_endpoints/chat_completions/request/tool_models.py +54 -0
  147. lionagi/integrations/openai_/api_endpoints/chat_completions/request/types.py +18 -0
  148. lionagi/integrations/openai_/api_endpoints/chat_completions/response/choice_models.py +62 -0
  149. lionagi/integrations/openai_/api_endpoints/chat_completions/response/function_models.py +16 -0
  150. lionagi/integrations/openai_/api_endpoints/chat_completions/response/log_prob_models.py +47 -0
  151. lionagi/integrations/openai_/api_endpoints/chat_completions/response/message_models.py +25 -0
  152. lionagi/integrations/openai_/api_endpoints/chat_completions/response/response_body.py +99 -0
  153. lionagi/integrations/openai_/api_endpoints/chat_completions/response/types.py +8 -0
  154. lionagi/integrations/openai_/api_endpoints/chat_completions/response/usage_models.py +24 -0
  155. lionagi/integrations/openai_/api_endpoints/chat_completions/util.py +46 -0
  156. lionagi/integrations/openai_/api_endpoints/data_models.py +23 -0
  157. lionagi/integrations/openai_/api_endpoints/embeddings/__init__.py +3 -0
  158. lionagi/integrations/openai_/api_endpoints/embeddings/request_body.py +79 -0
  159. lionagi/integrations/openai_/api_endpoints/embeddings/response_body.py +67 -0
  160. lionagi/integrations/openai_/api_endpoints/files/__init__.py +11 -0
  161. lionagi/integrations/openai_/api_endpoints/files/delete_file.py +20 -0
  162. lionagi/integrations/openai_/api_endpoints/files/file_models.py +56 -0
  163. lionagi/integrations/openai_/api_endpoints/files/list_files.py +27 -0
  164. lionagi/integrations/openai_/api_endpoints/files/retrieve_file.py +9 -0
  165. lionagi/integrations/openai_/api_endpoints/files/upload_file.py +38 -0
  166. lionagi/integrations/openai_/api_endpoints/fine_tuning/__init__.py +37 -0
  167. lionagi/integrations/openai_/api_endpoints/fine_tuning/cancel_jobs.py +9 -0
  168. lionagi/integrations/openai_/api_endpoints/fine_tuning/create_jobs.py +133 -0
  169. lionagi/integrations/openai_/api_endpoints/fine_tuning/fine_tuning_job_checkpoint_models.py +58 -0
  170. lionagi/integrations/openai_/api_endpoints/fine_tuning/fine_tuning_job_event_models.py +31 -0
  171. lionagi/integrations/openai_/api_endpoints/fine_tuning/fine_tuning_job_models.py +140 -0
  172. lionagi/integrations/openai_/api_endpoints/fine_tuning/list_fine_tuning_checkpoints.py +51 -0
  173. lionagi/integrations/openai_/api_endpoints/fine_tuning/list_fine_tuning_events.py +42 -0
  174. lionagi/integrations/openai_/api_endpoints/fine_tuning/list_fine_tuning_jobs.py +31 -0
  175. lionagi/integrations/openai_/api_endpoints/fine_tuning/retrieve_jobs.py +9 -0
  176. lionagi/integrations/openai_/api_endpoints/fine_tuning/training_format.py +30 -0
  177. lionagi/integrations/openai_/api_endpoints/images/__init__.py +9 -0
  178. lionagi/integrations/openai_/api_endpoints/images/image_edit_models.py +69 -0
  179. lionagi/integrations/openai_/api_endpoints/images/image_models.py +56 -0
  180. lionagi/integrations/openai_/api_endpoints/images/image_variation_models.py +56 -0
  181. lionagi/integrations/openai_/api_endpoints/images/response_body.py +30 -0
  182. lionagi/integrations/openai_/api_endpoints/match_data_model.py +197 -0
  183. lionagi/integrations/openai_/api_endpoints/match_response.py +336 -0
  184. lionagi/integrations/openai_/api_endpoints/models/__init__.py +7 -0
  185. lionagi/integrations/openai_/api_endpoints/models/delete_fine_tuned_model.py +17 -0
  186. lionagi/integrations/openai_/api_endpoints/models/models_models.py +31 -0
  187. lionagi/integrations/openai_/api_endpoints/models/retrieve_model.py +9 -0
  188. lionagi/integrations/openai_/api_endpoints/moderations/__init__.py +3 -0
  189. lionagi/integrations/openai_/api_endpoints/moderations/request_body.py +20 -0
  190. lionagi/integrations/openai_/api_endpoints/moderations/response_body.py +139 -0
  191. lionagi/integrations/openai_/api_endpoints/uploads/__init__.py +19 -0
  192. lionagi/integrations/openai_/api_endpoints/uploads/add_upload_part.py +11 -0
  193. lionagi/integrations/openai_/api_endpoints/uploads/cancel_upload.py +7 -0
  194. lionagi/integrations/openai_/api_endpoints/uploads/complete_upload.py +18 -0
  195. lionagi/integrations/openai_/api_endpoints/uploads/create_upload.py +17 -0
  196. lionagi/integrations/openai_/api_endpoints/uploads/uploads_models.py +52 -0
  197. lionagi/integrations/openai_/image_token_calculator/image_token_calculator.py +92 -0
  198. lionagi/integrations/openai_/image_token_calculator/openai_image_token_data.yaml +15 -0
  199. lionagi/integrations/openai_/openai_max_output_token_data.yaml +12 -0
  200. lionagi/integrations/openai_/openai_price_data.yaml +26 -0
  201. lionagi/integrations/openai_/version.py +1 -0
  202. lionagi/integrations/pandas_/__init__.py +24 -0
  203. lionagi/integrations/pandas_/extend_df.py +61 -0
  204. lionagi/integrations/pandas_/read.py +103 -0
  205. lionagi/integrations/pandas_/remove_rows.py +61 -0
  206. lionagi/integrations/pandas_/replace_keywords.py +65 -0
  207. lionagi/integrations/pandas_/save.py +131 -0
  208. lionagi/integrations/pandas_/search_keywords.py +69 -0
  209. lionagi/integrations/pandas_/to_df.py +196 -0
  210. lionagi/integrations/pandas_/update_cells.py +54 -0
  211. lionagi/integrations/perplexity_/PerplexityModel.py +269 -0
  212. lionagi/integrations/perplexity_/PerplexityService.py +113 -0
  213. lionagi/integrations/perplexity_/__init__.py +3 -0
  214. lionagi/integrations/perplexity_/api_endpoints/api_request.py +171 -0
  215. lionagi/integrations/perplexity_/api_endpoints/chat_completions/request/request_body.py +121 -0
  216. lionagi/integrations/perplexity_/api_endpoints/chat_completions/response/response_body.py +146 -0
  217. lionagi/integrations/perplexity_/api_endpoints/data_models.py +63 -0
  218. lionagi/integrations/perplexity_/api_endpoints/match_response.py +26 -0
  219. lionagi/integrations/perplexity_/perplexity_max_output_token_data.yaml +3 -0
  220. lionagi/integrations/perplexity_/perplexity_price_data.yaml +10 -0
  221. lionagi/integrations/perplexity_/version.py +1 -0
  222. lionagi/integrations/pydantic_/__init__.py +8 -0
  223. lionagi/integrations/pydantic_/break_down_annotation.py +81 -0
  224. lionagi/integrations/pydantic_/new_model.py +208 -0
  225. lionagi/integrations/services.py +17 -0
  226. lionagi/libs/__init__.py +0 -55
  227. lionagi/libs/compress/models.py +62 -0
  228. lionagi/libs/compress/utils.py +81 -0
  229. lionagi/libs/constants.py +98 -0
  230. lionagi/libs/file/chunk.py +265 -0
  231. lionagi/libs/file/file_ops.py +114 -0
  232. lionagi/libs/file/params.py +212 -0
  233. lionagi/libs/file/path.py +301 -0
  234. lionagi/libs/file/process.py +139 -0
  235. lionagi/libs/file/save.py +90 -0
  236. lionagi/libs/file/types.py +22 -0
  237. lionagi/libs/func/async_calls/__init__.py +21 -0
  238. lionagi/libs/func/async_calls/alcall.py +157 -0
  239. lionagi/libs/func/async_calls/bcall.py +82 -0
  240. lionagi/libs/func/async_calls/mcall.py +134 -0
  241. lionagi/libs/func/async_calls/pcall.py +149 -0
  242. lionagi/libs/func/async_calls/rcall.py +185 -0
  243. lionagi/libs/func/async_calls/tcall.py +114 -0
  244. lionagi/libs/func/async_calls/ucall.py +85 -0
  245. lionagi/libs/func/decorators.py +277 -0
  246. lionagi/libs/func/lcall.py +57 -0
  247. lionagi/libs/func/params.py +64 -0
  248. lionagi/libs/func/throttle.py +119 -0
  249. lionagi/libs/func/types.py +39 -0
  250. lionagi/libs/func/utils.py +96 -0
  251. lionagi/libs/package/imports.py +162 -0
  252. lionagi/libs/package/management.py +58 -0
  253. lionagi/libs/package/params.py +26 -0
  254. lionagi/libs/package/system.py +18 -0
  255. lionagi/libs/package/types.py +26 -0
  256. lionagi/libs/parse/__init__.py +1 -0
  257. lionagi/libs/parse/flatten/__init__.py +9 -0
  258. lionagi/libs/parse/flatten/flatten.py +168 -0
  259. lionagi/libs/parse/flatten/params.py +52 -0
  260. lionagi/libs/parse/flatten/unflatten.py +79 -0
  261. lionagi/libs/parse/json/__init__.py +27 -0
  262. lionagi/libs/parse/json/as_readable.py +104 -0
  263. lionagi/libs/parse/json/extract.py +102 -0
  264. lionagi/libs/parse/json/parse.py +179 -0
  265. lionagi/libs/parse/json/schema.py +227 -0
  266. lionagi/libs/parse/json/to_json.py +71 -0
  267. lionagi/libs/parse/nested/__init__.py +33 -0
  268. lionagi/libs/parse/nested/nfilter.py +55 -0
  269. lionagi/libs/parse/nested/nget.py +40 -0
  270. lionagi/libs/parse/nested/ninsert.py +103 -0
  271. lionagi/libs/parse/nested/nmerge.py +155 -0
  272. lionagi/libs/parse/nested/npop.py +66 -0
  273. lionagi/libs/parse/nested/nset.py +89 -0
  274. lionagi/libs/parse/nested/to_flat_list.py +64 -0
  275. lionagi/libs/parse/nested/utils.py +185 -0
  276. lionagi/libs/parse/string_parse/__init__.py +11 -0
  277. lionagi/libs/parse/string_parse/code_block.py +73 -0
  278. lionagi/libs/parse/string_parse/docstring.py +179 -0
  279. lionagi/libs/parse/string_parse/function_.py +92 -0
  280. lionagi/libs/parse/type_convert/__init__.py +19 -0
  281. lionagi/libs/parse/type_convert/params.py +145 -0
  282. lionagi/libs/parse/type_convert/to_dict.py +333 -0
  283. lionagi/libs/parse/type_convert/to_list.py +186 -0
  284. lionagi/libs/parse/type_convert/to_num.py +358 -0
  285. lionagi/libs/parse/type_convert/to_str.py +195 -0
  286. lionagi/libs/parse/types.py +9 -0
  287. lionagi/libs/parse/validate/__init__.py +14 -0
  288. lionagi/libs/parse/validate/boolean.py +96 -0
  289. lionagi/libs/parse/validate/keys.py +150 -0
  290. lionagi/libs/parse/validate/mapping.py +109 -0
  291. lionagi/libs/parse/validate/params.py +62 -0
  292. lionagi/libs/parse/xml/__init__.py +10 -0
  293. lionagi/libs/parse/xml/convert.py +56 -0
  294. lionagi/libs/parse/xml/parser.py +93 -0
  295. lionagi/libs/string_similarity/__init__.py +32 -0
  296. lionagi/libs/string_similarity/algorithms.py +219 -0
  297. lionagi/libs/string_similarity/matcher.py +102 -0
  298. lionagi/libs/string_similarity/utils.py +15 -0
  299. lionagi/libs/utils.py +255 -0
  300. lionagi/operations/__init__.py +3 -6
  301. lionagi/operations/brainstorm/__init__.py +3 -0
  302. lionagi/operations/brainstorm/brainstorm.py +204 -0
  303. lionagi/operations/brainstorm/prompt.py +1 -0
  304. lionagi/operations/plan/__init__.py +3 -0
  305. lionagi/operations/plan/plan.py +172 -0
  306. lionagi/operations/plan/prompt.py +21 -0
  307. lionagi/operations/select/__init__.py +3 -0
  308. lionagi/operations/select/prompt.py +1 -0
  309. lionagi/operations/select/select.py +100 -0
  310. lionagi/operations/select/utils.py +107 -0
  311. lionagi/operations/utils.py +35 -0
  312. lionagi/protocols/adapters/adapter.py +79 -0
  313. lionagi/protocols/adapters/json_adapter.py +43 -0
  314. lionagi/protocols/adapters/pandas_adapter.py +96 -0
  315. lionagi/protocols/configs/__init__.py +15 -0
  316. lionagi/protocols/configs/branch_config.py +86 -0
  317. lionagi/protocols/configs/id_config.py +15 -0
  318. lionagi/protocols/configs/imodel_config.py +73 -0
  319. lionagi/protocols/configs/log_config.py +93 -0
  320. lionagi/protocols/configs/retry_config.py +29 -0
  321. lionagi/protocols/operatives/__init__.py +15 -0
  322. lionagi/protocols/operatives/action.py +181 -0
  323. lionagi/protocols/operatives/instruct.py +196 -0
  324. lionagi/protocols/operatives/operative.py +182 -0
  325. lionagi/protocols/operatives/prompts.py +232 -0
  326. lionagi/protocols/operatives/reason.py +56 -0
  327. lionagi/protocols/operatives/step.py +217 -0
  328. lionagi/protocols/registries/_component_registry.py +19 -0
  329. lionagi/protocols/registries/_pile_registry.py +26 -0
  330. lionagi/service/__init__.py +13 -0
  331. lionagi/service/complete_request_info.py +11 -0
  332. lionagi/service/imodel.py +125 -0
  333. lionagi/service/rate_limiter.py +108 -0
  334. lionagi/service/service.py +41 -0
  335. lionagi/service/service_match_util.py +131 -0
  336. lionagi/service/service_util.py +72 -0
  337. lionagi/service/token_calculator.py +51 -0
  338. lionagi/settings.py +136 -0
  339. lionagi/strategies/base.py +53 -0
  340. lionagi/strategies/concurrent.py +71 -0
  341. lionagi/strategies/concurrent_chunk.py +43 -0
  342. lionagi/strategies/concurrent_sequential_chunk.py +104 -0
  343. lionagi/strategies/params.py +128 -0
  344. lionagi/strategies/sequential.py +23 -0
  345. lionagi/strategies/sequential_chunk.py +89 -0
  346. lionagi/strategies/sequential_concurrent_chunk.py +100 -0
  347. lionagi/strategies/types.py +21 -0
  348. lionagi/strategies/utils.py +49 -0
  349. lionagi/version.py +1 -1
  350. lionagi-0.5.1.dist-info/METADATA +545 -0
  351. lionagi-0.5.1.dist-info/RECORD +373 -0
  352. {lionagi-0.4.0.dist-info → lionagi-0.5.1.dist-info}/WHEEL +1 -1
  353. lionagi/core/_setting/_setting.py +0 -59
  354. lionagi/core/action/README.md +0 -20
  355. lionagi/core/action/manual.py +0 -1
  356. lionagi/core/action/node.py +0 -94
  357. lionagi/core/action/tool_manager.py +0 -342
  358. lionagi/core/agent/README.md +0 -1
  359. lionagi/core/agent/base_agent.py +0 -82
  360. lionagi/core/agent/eval/README.md +0 -1
  361. lionagi/core/agent/eval/evaluator.py +0 -1
  362. lionagi/core/agent/eval/vote.py +0 -40
  363. lionagi/core/agent/learn/learner.py +0 -59
  364. lionagi/core/agent/plan/unit_template.py +0 -1
  365. lionagi/core/collections/README.md +0 -23
  366. lionagi/core/collections/__init__.py +0 -16
  367. lionagi/core/collections/_logger.py +0 -312
  368. lionagi/core/collections/abc/README.md +0 -63
  369. lionagi/core/collections/abc/__init__.py +0 -53
  370. lionagi/core/collections/abc/component.py +0 -620
  371. lionagi/core/collections/abc/concepts.py +0 -277
  372. lionagi/core/collections/abc/exceptions.py +0 -136
  373. lionagi/core/collections/abc/util.py +0 -45
  374. lionagi/core/collections/exchange.py +0 -146
  375. lionagi/core/collections/flow.py +0 -416
  376. lionagi/core/collections/model.py +0 -465
  377. lionagi/core/collections/pile.py +0 -1232
  378. lionagi/core/collections/progression.py +0 -221
  379. lionagi/core/collections/util.py +0 -73
  380. lionagi/core/director/README.md +0 -1
  381. lionagi/core/director/direct.py +0 -298
  382. lionagi/core/director/director.py +0 -2
  383. lionagi/core/director/operations/select.py +0 -3
  384. lionagi/core/director/operations/utils.py +0 -6
  385. lionagi/core/engine/branch_engine.py +0 -361
  386. lionagi/core/engine/instruction_map_engine.py +0 -213
  387. lionagi/core/engine/sandbox_.py +0 -16
  388. lionagi/core/engine/script_engine.py +0 -89
  389. lionagi/core/executor/base_executor.py +0 -97
  390. lionagi/core/executor/graph_executor.py +0 -335
  391. lionagi/core/executor/neo4j_executor.py +0 -394
  392. lionagi/core/generic/README.md +0 -0
  393. lionagi/core/generic/edge_condition.py +0 -17
  394. lionagi/core/generic/hyperedge.py +0 -1
  395. lionagi/core/generic/tree.py +0 -49
  396. lionagi/core/generic/tree_node.py +0 -85
  397. lionagi/core/mail/__init__.py +0 -11
  398. lionagi/core/mail/mail.py +0 -26
  399. lionagi/core/mail/mail_manager.py +0 -185
  400. lionagi/core/mail/package.py +0 -49
  401. lionagi/core/mail/start_mail.py +0 -36
  402. lionagi/core/message/__init__.py +0 -18
  403. lionagi/core/message/action_request.py +0 -114
  404. lionagi/core/message/action_response.py +0 -121
  405. lionagi/core/message/assistant_response.py +0 -80
  406. lionagi/core/message/instruction.py +0 -194
  407. lionagi/core/message/message.py +0 -86
  408. lionagi/core/message/system.py +0 -71
  409. lionagi/core/message/util.py +0 -274
  410. lionagi/core/report/__init__.py +0 -4
  411. lionagi/core/report/base.py +0 -201
  412. lionagi/core/report/form.py +0 -212
  413. lionagi/core/report/report.py +0 -150
  414. lionagi/core/report/util.py +0 -15
  415. lionagi/core/rule/_default.py +0 -17
  416. lionagi/core/rule/action.py +0 -87
  417. lionagi/core/rule/base.py +0 -234
  418. lionagi/core/rule/boolean.py +0 -56
  419. lionagi/core/rule/choice.py +0 -48
  420. lionagi/core/rule/mapping.py +0 -82
  421. lionagi/core/rule/number.py +0 -73
  422. lionagi/core/rule/rulebook.py +0 -45
  423. lionagi/core/rule/string.py +0 -43
  424. lionagi/core/rule/util.py +0 -0
  425. lionagi/core/session/directive_mixin.py +0 -307
  426. lionagi/core/structure/__init__.py +0 -1
  427. lionagi/core/structure/chain.py +0 -1
  428. lionagi/core/structure/forest.py +0 -1
  429. lionagi/core/structure/graph.py +0 -1
  430. lionagi/core/structure/tree.py +0 -1
  431. lionagi/core/unit/__init__.py +0 -4
  432. lionagi/core/unit/parallel_unit.py +0 -234
  433. lionagi/core/unit/template/action.py +0 -65
  434. lionagi/core/unit/template/base.py +0 -35
  435. lionagi/core/unit/template/plan.py +0 -69
  436. lionagi/core/unit/template/predict.py +0 -95
  437. lionagi/core/unit/template/score.py +0 -108
  438. lionagi/core/unit/template/select.py +0 -91
  439. lionagi/core/unit/unit.py +0 -452
  440. lionagi/core/unit/unit_form.py +0 -290
  441. lionagi/core/unit/unit_mixin.py +0 -1166
  442. lionagi/core/unit/util.py +0 -103
  443. lionagi/core/validator/validator.py +0 -376
  444. lionagi/core/work/work.py +0 -59
  445. lionagi/core/work/work_edge.py +0 -102
  446. lionagi/core/work/work_function.py +0 -114
  447. lionagi/core/work/work_function_node.py +0 -50
  448. lionagi/core/work/work_queue.py +0 -90
  449. lionagi/core/work/work_task.py +0 -151
  450. lionagi/core/work/worker.py +0 -410
  451. lionagi/core/work/worker_engine.py +0 -208
  452. lionagi/core/work/worklog.py +0 -108
  453. lionagi/experimental/compressor/base.py +0 -47
  454. lionagi/experimental/compressor/llm_compressor.py +0 -265
  455. lionagi/experimental/compressor/llm_summarizer.py +0 -61
  456. lionagi/experimental/compressor/util.py +0 -70
  457. lionagi/experimental/directive/README.md +0 -1
  458. lionagi/experimental/directive/__init__.py +0 -19
  459. lionagi/experimental/directive/parser/base_parser.py +0 -294
  460. lionagi/experimental/directive/parser/base_syntax.txt +0 -200
  461. lionagi/experimental/directive/template/base_template.py +0 -71
  462. lionagi/experimental/directive/template/schema.py +0 -36
  463. lionagi/experimental/directive/tokenizer.py +0 -59
  464. lionagi/experimental/evaluator/README.md +0 -1
  465. lionagi/experimental/evaluator/ast_evaluator.py +0 -119
  466. lionagi/experimental/evaluator/base_evaluator.py +0 -213
  467. lionagi/experimental/knowledge/__init__.py +0 -0
  468. lionagi/experimental/knowledge/base.py +0 -10
  469. lionagi/experimental/knowledge/graph.py +0 -0
  470. lionagi/experimental/memory/__init__.py +0 -0
  471. lionagi/experimental/strategies/__init__.py +0 -0
  472. lionagi/experimental/strategies/base.py +0 -1
  473. lionagi/integrations/bridge/__init__.py +0 -4
  474. lionagi/integrations/bridge/autogen_/__init__.py +0 -0
  475. lionagi/integrations/bridge/autogen_/autogen_.py +0 -127
  476. lionagi/integrations/bridge/langchain_/__init__.py +0 -0
  477. lionagi/integrations/bridge/langchain_/documents.py +0 -138
  478. lionagi/integrations/bridge/langchain_/langchain_bridge.py +0 -68
  479. lionagi/integrations/bridge/llamaindex_/__init__.py +0 -0
  480. lionagi/integrations/bridge/llamaindex_/index.py +0 -36
  481. lionagi/integrations/bridge/llamaindex_/llama_index_bridge.py +0 -108
  482. lionagi/integrations/bridge/llamaindex_/llama_pack.py +0 -256
  483. lionagi/integrations/bridge/llamaindex_/node_parser.py +0 -92
  484. lionagi/integrations/bridge/llamaindex_/reader.py +0 -201
  485. lionagi/integrations/bridge/llamaindex_/textnode.py +0 -59
  486. lionagi/integrations/bridge/pydantic_/__init__.py +0 -0
  487. lionagi/integrations/bridge/pydantic_/pydantic_bridge.py +0 -7
  488. lionagi/integrations/bridge/transformers_/__init__.py +0 -0
  489. lionagi/integrations/bridge/transformers_/install_.py +0 -39
  490. lionagi/integrations/chunker/__init__.py +0 -0
  491. lionagi/integrations/chunker/chunk.py +0 -314
  492. lionagi/integrations/config/__init__.py +0 -4
  493. lionagi/integrations/config/mlx_configs.py +0 -1
  494. lionagi/integrations/config/oai_configs.py +0 -154
  495. lionagi/integrations/config/ollama_configs.py +0 -1
  496. lionagi/integrations/config/openrouter_configs.py +0 -74
  497. lionagi/integrations/langchain_/__init__.py +0 -0
  498. lionagi/integrations/llamaindex_/__init__.py +0 -0
  499. lionagi/integrations/loader/__init__.py +0 -0
  500. lionagi/integrations/loader/load.py +0 -257
  501. lionagi/integrations/loader/load_util.py +0 -214
  502. lionagi/integrations/provider/__init__.py +0 -11
  503. lionagi/integrations/provider/_mapping.py +0 -47
  504. lionagi/integrations/provider/litellm.py +0 -53
  505. lionagi/integrations/provider/mistralai.py +0 -1
  506. lionagi/integrations/provider/mlx_service.py +0 -55
  507. lionagi/integrations/provider/oai.py +0 -196
  508. lionagi/integrations/provider/ollama.py +0 -55
  509. lionagi/integrations/provider/openrouter.py +0 -170
  510. lionagi/integrations/provider/services.py +0 -138
  511. lionagi/integrations/provider/transformers.py +0 -108
  512. lionagi/integrations/storage/__init__.py +0 -3
  513. lionagi/integrations/storage/neo4j.py +0 -681
  514. lionagi/integrations/storage/storage_util.py +0 -302
  515. lionagi/integrations/storage/structure_excel.py +0 -291
  516. lionagi/integrations/storage/to_csv.py +0 -70
  517. lionagi/integrations/storage/to_excel.py +0 -91
  518. lionagi/libs/ln_api.py +0 -944
  519. lionagi/libs/ln_async.py +0 -208
  520. lionagi/libs/ln_context.py +0 -37
  521. lionagi/libs/ln_convert.py +0 -671
  522. lionagi/libs/ln_dataframe.py +0 -187
  523. lionagi/libs/ln_func_call.py +0 -1328
  524. lionagi/libs/ln_image.py +0 -114
  525. lionagi/libs/ln_knowledge_graph.py +0 -422
  526. lionagi/libs/ln_nested.py +0 -822
  527. lionagi/libs/ln_parse.py +0 -750
  528. lionagi/libs/ln_queue.py +0 -107
  529. lionagi/libs/ln_tokenize.py +0 -179
  530. lionagi/libs/ln_validate.py +0 -299
  531. lionagi/libs/special_tokens.py +0 -172
  532. lionagi/libs/sys_util.py +0 -710
  533. lionagi/lions/__init__.py +0 -0
  534. lionagi/lions/coder/__init__.py +0 -0
  535. lionagi/lions/coder/add_feature.py +0 -20
  536. lionagi/lions/coder/base_prompts.py +0 -22
  537. lionagi/lions/coder/code_form.py +0 -15
  538. lionagi/lions/coder/coder.py +0 -184
  539. lionagi/lions/coder/util.py +0 -101
  540. lionagi/lions/director/__init__.py +0 -0
  541. lionagi/lions/judge/__init__.py +0 -0
  542. lionagi/lions/judge/config.py +0 -8
  543. lionagi/lions/judge/data/__init__.py +0 -0
  544. lionagi/lions/judge/data/sample_codes.py +0 -526
  545. lionagi/lions/judge/data/sample_rurbic.py +0 -48
  546. lionagi/lions/judge/forms/__init__.py +0 -0
  547. lionagi/lions/judge/forms/code_analysis_form.py +0 -126
  548. lionagi/lions/judge/rubric.py +0 -34
  549. lionagi/lions/judge/services/__init__.py +0 -0
  550. lionagi/lions/judge/services/judge_code.py +0 -49
  551. lionagi/lions/researcher/__init__.py +0 -0
  552. lionagi/lions/researcher/data_source/__init__.py +0 -0
  553. lionagi/lions/researcher/data_source/finhub_.py +0 -192
  554. lionagi/lions/researcher/data_source/google_.py +0 -207
  555. lionagi/lions/researcher/data_source/wiki_.py +0 -98
  556. lionagi/lions/researcher/data_source/yfinance_.py +0 -21
  557. lionagi/operations/brainstorm.py +0 -87
  558. lionagi/operations/config.py +0 -6
  559. lionagi/operations/rank.py +0 -102
  560. lionagi/operations/score.py +0 -144
  561. lionagi/operations/select.py +0 -141
  562. lionagi-0.4.0.dist-info/METADATA +0 -241
  563. lionagi-0.4.0.dist-info/RECORD +0 -249
  564. /lionagi/{core/_setting → integrations/anthropic_/api_endpoints/messages/response}/__init__.py +0 -0
  565. /lionagi/{core/agent → integrations/groq_/api_endpoints}/__init__.py +0 -0
  566. /lionagi/{core/agent/eval → integrations/ollama_/api_endpoints/completion}/__init__.py +0 -0
  567. /lionagi/{core/agent/learn → integrations/ollama_/api_endpoints/embedding}/__init__.py +0 -0
  568. /lionagi/{core/agent/plan → integrations/openai_}/__init__.py +0 -0
  569. /lionagi/{core/director → integrations/openai_/api_endpoints/chat_completions/response}/__init__.py +0 -0
  570. /lionagi/{core/director/operations → integrations/openai_/image_token_calculator}/__init__.py +0 -0
  571. /lionagi/{core/engine → integrations/perplexity_/api_endpoints}/__init__.py +0 -0
  572. /lionagi/{core/executor → integrations/perplexity_/api_endpoints/chat_completions}/__init__.py +0 -0
  573. /lionagi/{core/generic/registry/component_registry → integrations/perplexity_/api_endpoints/chat_completions/request}/__init__.py +0 -0
  574. /lionagi/{core/rule → integrations/perplexity_/api_endpoints/chat_completions/response}/__init__.py +0 -0
  575. /lionagi/{core/unit/template → libs/compress}/__init__.py +0 -0
  576. /lionagi/{core/validator → libs/file}/__init__.py +0 -0
  577. /lionagi/{core/work → libs/func}/__init__.py +0 -0
  578. /lionagi/{experimental → libs/package}/__init__.py +0 -0
  579. /lionagi/{core/agent/plan/plan.py → libs/parse/params.py} +0 -0
  580. /lionagi/{experimental/compressor → protocols}/__init__.py +0 -0
  581. /lionagi/{experimental/directive/parser → protocols/adapters}/__init__.py +0 -0
  582. /lionagi/{experimental/directive/template → protocols/registries}/__init__.py +0 -0
  583. /lionagi/{experimental/evaluator → strategies}/__init__.py +0 -0
  584. {lionagi-0.4.0.dist-info → lionagi-0.5.1.dist-info/licenses}/LICENSE +0 -0
@@ -1,154 +0,0 @@
1
- # Default configs for the OpenAI API
2
-
3
- API_key_schema = ("OPENAI_API_KEY",)
4
-
5
- # ChatCompletion
6
- oai_chat_llmconfig = {
7
- "model": "gpt-4o-2024-08-06",
8
- "frequency_penalty": 0,
9
- "max_tokens": None,
10
- "n": 1,
11
- "presence_penalty": 0,
12
- "response_format": {"type": "text"},
13
- "seed": None,
14
- "stop": None,
15
- "stream": False,
16
- "temperature": 0.1,
17
- "top_p": 1,
18
- "tools": None,
19
- "tool_choice": "none",
20
- "user": None,
21
- "logprobs": False,
22
- "top_logprobs": None,
23
- }
24
-
25
- oai_chat_schema = {
26
- "required": [
27
- "model",
28
- "frequency_penalty",
29
- "n",
30
- "presence_penalty",
31
- "response_format",
32
- "temperature",
33
- "top_p",
34
- ],
35
- "optional": [
36
- "seed",
37
- "stop",
38
- "stream",
39
- "tools",
40
- "tool_choice",
41
- "user",
42
- "max_tokens",
43
- "logprobs",
44
- "top_logprobs",
45
- ],
46
- "input_": "messages",
47
- "config": oai_chat_llmconfig,
48
- "token_encoding_name": "cl100k_base",
49
- "token_limit": 128_000,
50
- "interval_tokens": 1_000_000,
51
- "interval_requests": 1_000,
52
- "interval": 60,
53
- }
54
-
55
- # Finetune
56
- oai_finetune_llmconfig = {
57
- "model": "gpt-3.5-turbo",
58
- "hyperparameters": {
59
- "batch_size": "auto",
60
- "learning_rate_multiplier": "auto",
61
- "n_epochs": "auto",
62
- },
63
- "suffix": None,
64
- "training_file": None,
65
- }
66
-
67
- oai_finetune_schema = {
68
- "required": ["model", "training_file"],
69
- "optional": ["hyperparameters", "suffix", "validate_file"],
70
- "input_": ["training_file"],
71
- "config": oai_finetune_llmconfig,
72
- }
73
-
74
- # Audio ---- create speech
75
-
76
- oai_audio_speech_llmconfig = {
77
- "model": "tts-1",
78
- "voice": "alloy",
79
- "response_format": "mp3",
80
- "speed": 1,
81
- }
82
- oai_audio_speech_schema = {
83
- "required": ["model", "voice"],
84
- "optional": ["response_format", "speed"],
85
- "input_": "input_",
86
- "config": oai_audio_speech_llmconfig,
87
- }
88
-
89
- # Audio ----------- create transcription
90
- oai_audio_transcriptions_llmconfig = {
91
- "model": "whisper-1",
92
- "language": None,
93
- "format_prompt": None,
94
- "response_format": "json",
95
- "temperature": 0,
96
- }
97
- oai_audio_transcriptions_schema = {
98
- "required": ["model", "voice"],
99
- "optional": [
100
- "response_format",
101
- "language",
102
- "format_prompt",
103
- "response_format",
104
- "temperature",
105
- ],
106
- "input_": "file",
107
- "config": oai_audio_transcriptions_llmconfig,
108
- }
109
-
110
- # Audio ------------ translations
111
- oai_audio_translations_llmconfig = {
112
- "model": "whisper-1",
113
- "format_prompt": None,
114
- "response_format": "json",
115
- "temperature": 0,
116
- }
117
-
118
- oai_audio_translations_schema = {
119
- "required": ["model"],
120
- "optional": ["response_format", "speed", "format_prompt", "temperature"],
121
- "input_": "file",
122
- "config": oai_audio_translations_llmconfig,
123
- }
124
-
125
- # embeddings
126
-
127
- oai_embeddings_llmconfig = {
128
- "model": "text-embedding-ada-002",
129
- "encoding_format": "float",
130
- "user": None,
131
- "dimensions": None,
132
- }
133
-
134
- oai_embeddings_schema = {
135
- "required": ["model", "encoding_format"],
136
- "optional": ["user", "dimensions"],
137
- "input_": "input",
138
- "config": oai_embeddings_llmconfig,
139
- "token_encoding_name": "cl100k_base",
140
- "token_limit": 8192,
141
- "interval_tokens": 1_000_000,
142
- "interval_requests": 1_000,
143
- "interval": 60,
144
- }
145
-
146
- oai_schema = {
147
- "chat/completions": oai_chat_schema,
148
- "finetune": oai_finetune_schema,
149
- "audio_speech": oai_audio_speech_schema,
150
- "audio_transcriptions": oai_audio_transcriptions_schema,
151
- "audio_translations": oai_audio_translations_schema,
152
- "API_key_schema": API_key_schema,
153
- "embeddings": oai_embeddings_schema,
154
- }
@@ -1 +0,0 @@
1
- model = "llama3"
@@ -1,74 +0,0 @@
1
- API_key_schema = ("OPENROUTER_API_KEY",)
2
-
3
- openrouter_chat_llmconfig = {
4
- "model": "gpt-4o",
5
- "frequency_penalty": 0,
6
- "max_tokens": None,
7
- "num": 1,
8
- "presence_penalty": 0,
9
- "response_format": {"type": "text"},
10
- "seed": None,
11
- "stop": None,
12
- "stream": False,
13
- "temperature": 0.1,
14
- "top_p": 1,
15
- "tools": None,
16
- "tool_choice": "none",
17
- "user": None,
18
- "logprobs": False,
19
- "top_logprobs": None,
20
- }
21
-
22
- openrouter_chat_schema = {
23
- "required": [
24
- "model",
25
- "frequency_penalty",
26
- "num",
27
- "presence_penalty",
28
- "response_format",
29
- "temperature",
30
- "top_p",
31
- ],
32
- "optional": [
33
- "seed",
34
- "stop",
35
- "stream",
36
- "tools",
37
- "tool_choice",
38
- "user",
39
- "max_tokens",
40
- "logprobs",
41
- "top_logprobs",
42
- ],
43
- "input_": "messages",
44
- "config": openrouter_chat_llmconfig,
45
- "token_encoding_name": "cl100k_base",
46
- "token_limit": 128_000,
47
- "interval_tokens": 10_000,
48
- "interval_requests": 100,
49
- "interval": 60,
50
- }
51
-
52
- openrouter_finetune_llmconfig = {
53
- "model": "gpt-3.5-turbo",
54
- "hyperparameters": {
55
- "batch_size": "auto",
56
- "learning_rate_multiplier": "auto",
57
- "n_epochs": "auto",
58
- },
59
- "suffix": None,
60
- "training_file": None,
61
- }
62
-
63
- openrouter_finetune_schema = {
64
- "required": ["model", "training_file"],
65
- "optional": ["hyperparameters", "suffix", "validate_file"],
66
- "input_": ["training_file"],
67
- "config": openrouter_finetune_llmconfig,
68
- }
69
-
70
- openrouter_schema = {
71
- "chat/completions": openrouter_chat_schema,
72
- "finetune": openrouter_finetune_schema,
73
- "API_key_schema": API_key_schema,
74
- }
File without changes
File without changes
File without changes
@@ -1,257 +0,0 @@
1
- from collections.abc import Callable
2
-
3
- from lionagi.core.collections import pile
4
- from lionagi.core.generic import Node
5
-
6
- from ..bridge.langchain_.langchain_bridge import LangchainBridge
7
- from ..bridge.llamaindex_.llama_index_bridge import LlamaIndexBridge
8
- from .load_util import ReaderType, _datanode_parser, dir_to_nodes
9
-
10
-
11
- def text_reader(args, kwargs):
12
- """
13
- Reads text files from a directory and converts them to Node instances.
14
-
15
- Args:
16
- args: Positional arguments for the dir_to_nodes function.
17
- kwargs: Keyword arguments for the dir_to_nodes function.
18
-
19
- Returns:
20
- A list of Node instances.
21
-
22
- Example usage:
23
- >>> args = ['path/to/text/files']
24
- >>> kwargs = {'file_extension': 'txt'}
25
- >>> nodes = text_reader(args, kwargs)
26
- """
27
- return dir_to_nodes(*args, **kwargs)
28
-
29
-
30
- def load(
31
- reader: str | Callable = "text_reader",
32
- input_dir=None,
33
- input_files=None,
34
- recursive: bool = False,
35
- required_exts: list[str] = None,
36
- reader_type=ReaderType.PLAIN,
37
- reader_args=None,
38
- reader_kwargs=None,
39
- load_args=None,
40
- load_kwargs=None,
41
- to_lion: bool | Callable = True,
42
- ):
43
- """
44
- Loads data using the specified reader and converts it to Node instances.
45
-
46
- Args:
47
- reader (str | Callable): The reader function or its name. Defaults to "text_reader".
48
- input_dir (str, optional): The directory to read files from. Defaults to None.
49
- input_files (list[str], optional): Specific files to read. Defaults to None.
50
- recursive (bool, optional): Whether to read files recursively. Defaults to False.
51
- required_exts (list[str], optional): List of required file extensions. Defaults to None.
52
- reader_type (ReaderType, optional): The type of reader to use. Defaults to ReaderType.PLAIN.
53
- reader_args (list, optional): Positional arguments for the reader function. Defaults to None.
54
- reader_kwargs (dict, optional): Keyword arguments for the reader function. Defaults to None.
55
- load_args (list, optional): Positional arguments for loading. Defaults to None.
56
- load_kwargs (dict, optional): Keyword arguments for loading. Defaults to None.
57
- to_lion (bool | Callable, optional): Whether to convert the data to Node instances or a custom parser. Defaults to True.
58
-
59
- Returns:
60
- pile: A pile of Node instances.
61
-
62
- Raises:
63
- ValueError: If the reader_type is not supported.
64
-
65
- Example usage:
66
- >>> nodes = load(input_dir='path/to/text/files', required_exts=['txt'])
67
- """
68
-
69
- if reader_args is None:
70
- reader_args = []
71
- if reader_kwargs is None:
72
- reader_kwargs = {}
73
- if load_args is None:
74
- load_args = []
75
- if load_kwargs is None:
76
- load_kwargs = {}
77
-
78
- if reader_type == ReaderType.PLAIN:
79
- reader_kwargs["dir_"] = input_dir
80
- reader_kwargs["ext"] = required_exts
81
- reader_kwargs["recursive"] = recursive
82
-
83
- return read_funcs[ReaderType.PLAIN](reader, reader_args, reader_kwargs)
84
-
85
- if reader_type == ReaderType.LANGCHAIN:
86
- return read_funcs[ReaderType.LANGCHAIN](
87
- reader, reader_args, reader_kwargs, to_lion
88
- )
89
-
90
- elif reader_type == ReaderType.LLAMAINDEX:
91
- if input_dir is not None:
92
- reader_kwargs["input_dir"] = input_dir
93
- if input_files is not None:
94
- reader_kwargs["input_files"] = input_files
95
- if recursive:
96
- reader_kwargs["recursive"] = True
97
- if required_exts is not None:
98
- reader_kwargs["required_exts"] = required_exts
99
-
100
- return read_funcs[ReaderType.LLAMAINDEX](
101
- reader, reader_args, reader_kwargs, load_args, load_kwargs, to_lion
102
- )
103
-
104
- elif reader_type == ReaderType.SELFDEFINED:
105
- return read_funcs[ReaderType.SELFDEFINED](
106
- reader, reader_args, reader_kwargs, load_args, load_kwargs, to_lion
107
- )
108
-
109
- else:
110
- raise ValueError(
111
- f"{reader_type} is not supported. Please choose from {list(ReaderType)}"
112
- )
113
-
114
-
115
- def _plain_reader(reader, reader_args, reader_kwargs):
116
- """
117
- Reads data using a plain reader.
118
-
119
- Args:
120
- reader (str | Callable): The reader function or its name.
121
- reader_args (list): Positional arguments for the reader function.
122
- reader_kwargs (dict): Keyword arguments for the reader function.
123
-
124
- Returns:
125
- pile: A pile of Node instances.
126
-
127
- Raises:
128
- ValueError: If the reader is not supported.
129
-
130
- Example usage:
131
- >>> nodes = _plain_reader('text_reader', ['path/to/files'], {'ext': 'txt'})
132
- """
133
- try:
134
- if reader == "text_reader":
135
- reader = text_reader
136
- nodes = reader(reader_args, reader_kwargs)
137
- return pile(nodes)
138
- except Exception as e:
139
- raise ValueError(
140
- f"Reader {reader} is currently not supported. Error: {e}"
141
- ) from e
142
-
143
-
144
- def _langchain_reader(
145
- reader, reader_args, reader_kwargs, to_lion: bool | Callable
146
- ):
147
- """
148
- Reads data using a Langchain reader.
149
-
150
- Args:
151
- reader (str | Callable): The reader function or its name.
152
- reader_args (list): Positional arguments for the reader function.
153
- reader_kwargs (dict): Keyword arguments for the reader function.
154
- to_lion (bool | Callable): Whether to convert the data to Node instances or a custom parser.
155
-
156
- Returns:
157
- pile: A pile of Node instances or custom parsed nodes.
158
-
159
- Example usage:
160
- >>> nodes = _langchain_reader('langchain_reader', ['arg1'], {'key': 'value'}, True)
161
- """
162
- nodes = LangchainBridge.langchain_loader(
163
- reader, reader_args, reader_kwargs
164
- )
165
- if isinstance(to_lion, bool) and to_lion is True:
166
- return pile([Node.from_langchain(i) for i in nodes])
167
-
168
- elif isinstance(to_lion, Callable):
169
- nodes = _datanode_parser(nodes, to_lion)
170
- return nodes
171
-
172
-
173
- def _llama_index_reader(
174
- reader,
175
- reader_args,
176
- reader_kwargs,
177
- load_args,
178
- load_kwargs,
179
- to_lion: bool | Callable,
180
- ):
181
- """
182
- Reads data using a LlamaIndex reader.
183
-
184
- Args:
185
- reader (str | Callable): The reader function or its name.
186
- reader_args (list): Positional arguments for the reader function.
187
- reader_kwargs (dict): Keyword arguments for the reader function.
188
- load_args (list): Positional arguments for loading.
189
- load_kwargs (dict): Keyword arguments for loading.
190
- to_lion (bool | Callable): Whether to convert the data to Node instances or a custom parser.
191
-
192
- Returns:
193
- pile: A pile of Node instances or custom parsed nodes.
194
-
195
- Example usage:
196
- >>> nodes = _llama_index_reader('llama_reader', ['arg1'], {'key': 'value'}, [], {}, True)
197
- """
198
- nodes = LlamaIndexBridge.llama_index_read_data(
199
- reader, reader_args, reader_kwargs, load_args, load_kwargs
200
- )
201
- if isinstance(to_lion, bool) and to_lion is True:
202
- return pile([Node.from_llama_index(i) for i in nodes])
203
-
204
- elif isinstance(to_lion, Callable):
205
- nodes = _datanode_parser(nodes, to_lion)
206
- return nodes
207
-
208
-
209
- def _self_defined_reader(
210
- reader,
211
- reader_args,
212
- reader_kwargs,
213
- load_args,
214
- load_kwargs,
215
- to_lion: bool | Callable,
216
- ):
217
- """
218
- Reads data using a self-defined reader.
219
-
220
- Args:
221
- reader (str | Callable): The reader function or its name.
222
- reader_args (list): Positional arguments for the reader function.
223
- reader_kwargs (dict): Keyword arguments for the reader function.
224
- load_args (list): Positional arguments for loading.
225
- load_kwargs (dict): Keyword arguments for loading.
226
- to_lion (bool | Callable): Whether to convert the data to Node instances or a custom parser.
227
-
228
- Returns:
229
- pile: A pile of Node instances or custom parsed nodes.
230
-
231
- Raises:
232
- ValueError: If the self-defined reader is not valid.
233
-
234
- Example usage:
235
- >>> nodes = _self_defined_reader(custom_reader, ['arg1'], {'key': 'value'}, [], {}, custom_parser)
236
- """
237
- try:
238
- loader = reader(*reader_args, **reader_kwargs)
239
- nodes = loader.load(*load_args, **load_kwargs)
240
- except Exception as e:
241
- raise ValueError(
242
- f"Self defined reader {reader} is not valid. Error: {e}"
243
- ) from e
244
-
245
- if isinstance(to_lion, bool) and to_lion is True:
246
- raise ValueError("Please define a valid parser to Node.")
247
- elif isinstance(to_lion, Callable):
248
- nodes = _datanode_parser(nodes, to_lion)
249
- return nodes
250
-
251
-
252
- read_funcs = {
253
- ReaderType.PLAIN: _plain_reader,
254
- ReaderType.LANGCHAIN: _langchain_reader,
255
- ReaderType.LLAMAINDEX: _llama_index_reader,
256
- ReaderType.SELFDEFINED: _self_defined_reader,
257
- }
@@ -1,214 +0,0 @@
1
- # use utils and schema
2
- from enum import Enum
3
- from pathlib import Path
4
- from typing import Any, Dict, List, Tuple, Union
5
-
6
- from lionagi.core.generic import Node
7
- from lionagi.libs import convert, func_call
8
- from lionagi.libs.ln_tokenize import TokenizeUtil
9
-
10
-
11
- class ReaderType(str, Enum):
12
- PLAIN = "plain"
13
- LANGCHAIN = "langchain"
14
- LLAMAINDEX = "llama_index"
15
- SELFDEFINED = "self_defined"
16
-
17
-
18
- class ChunkerType(str, Enum):
19
- PLAIN = "plain" # default
20
- LANGCHAIN = "langchain" # using langchain functions
21
- LLAMAINDEX = "llama_index" # using llamaindex functions
22
- SELFDEFINED = "self_defined" # create custom functions
23
-
24
-
25
- def dir_to_path(
26
- dir: str, ext: str, recursive: bool = False, flatten: bool = True
27
- ) -> list[Path]:
28
- """
29
- Generates a list of file paths from a directory with the given file extension.
30
-
31
- Parameters:
32
- dir (str): The directory to search for files.
33
-
34
- ext (str): The file extension to filter by.
35
-
36
- recursive (bool): Whether to search subdirectories recursively. Defaults to False.
37
-
38
- flatten (bool): Whether to flatten the list. Defaults to True.
39
-
40
- Returns:
41
- List[Path]: A list of Paths to the files.
42
-
43
- Raises:
44
- ValueError: If the directory or extension is invalid.
45
- """
46
-
47
- def _dir_to_path(ext):
48
- tem = "**/*" if recursive else "*"
49
- return list(Path(dir).glob(tem + ext))
50
-
51
- try:
52
- return convert.to_list(
53
- func_call.lcall(ext, _dir_to_path, flatten=True), flatten=flatten
54
- )
55
- except:
56
- raise ValueError(
57
- "Invalid directory or extension, please check the path"
58
- )
59
-
60
-
61
- def dir_to_nodes(
62
- dir_: str,
63
- ext: list[str] | str,
64
- recursive: bool = False,
65
- flatten: bool = True,
66
- clean_text: bool = True,
67
- ) -> list[Node]:
68
- """
69
- Converts directory contents into Node objects based on specified file extensions.
70
-
71
- This function first retrieves a list of file paths from the specified directory, matching the given file extension. It then reads the content of these files, optionally cleaning the text, and converts each file's content into a Node object.
72
-
73
- Parameters:
74
- dir (str): The directory path from which to read files.
75
- ext: The file extension(s) to include. Can be a single string or a list/tuple of strings.
76
- recursive (bool, optional): If True, the function searches for files recursively in subdirectories. Defaults to False.
77
- flatten (bool, optional): If True, flattens the directory structure in the returned paths. Defaults to True.
78
- clean_text (bool, optional): If True, cleans the text read from files. Defaults to True.
79
-
80
- Returns:
81
- list: A list of Node objects created from the files in the specified directory.
82
-
83
- Example:
84
- nodes = dir_to_nodes("/path/to/dir", ".txt", recursive=True)
85
- # This would read all .txt files in /path/to/dir and its subdirectories,
86
- # converting them into Node objects.
87
- """
88
-
89
- path_list = dir_to_path(
90
- dir=dir_, ext=ext, recursive=recursive, flatten=flatten
91
- )
92
- files_info = func_call.lcall(path_list, read_text, clean=clean_text)
93
- return func_call.lcall(
94
- files_info, lambda x: Node(content=x[0], metadata=x[1])
95
- )
96
-
97
-
98
- def read_text(filepath: str, clean: bool = True) -> tuple[str, dict]:
99
- """
100
- Reads text from a file and optionally cleans it, returning the content and metadata.
101
-
102
- Parameters:
103
- filepath (str): The path to the file to read.
104
-
105
- clean (bool): Whether to clean the text by replacing certain characters. Defaults to True.
106
-
107
- Returns:
108
- Tuple[str, dict]: A tuple containing the content and metadata of the file.
109
-
110
- Raises:
111
- FileNotFoundError: If the file cannot be found.
112
-
113
- PermissionError: If there are permissions issues.
114
-
115
- OSError: For other OS-related errors.
116
- """
117
-
118
- def _get_metadata():
119
- import os
120
- from datetime import datetime
121
-
122
- file = filepath
123
- size = os.path.getsize(filepath)
124
- creation_date = datetime.fromtimestamp(
125
- os.path.getctime(filepath)
126
- ).date()
127
- modified_date = datetime.fromtimestamp(
128
- os.path.getmtime(filepath)
129
- ).date()
130
- last_accessed_date = datetime.fromtimestamp(
131
- os.path.getatime(filepath)
132
- ).date()
133
- return {
134
- "file": convert.to_str(file),
135
- "size": size,
136
- "creation_date": str(creation_date),
137
- "modified_date": str(modified_date),
138
- "last_accessed_date": str(last_accessed_date),
139
- }
140
-
141
- try:
142
- with open(filepath) as f:
143
- content = f.read()
144
- if clean:
145
- # Define characters to replace and their replacements
146
- replacements = {"\\": "", "\n\n": "\n"}
147
- for old, new in replacements.items():
148
- content = content.replace(old, new).strip()
149
- metadata = _get_metadata()
150
- return content, metadata
151
- except Exception as e:
152
- raise e
153
-
154
-
155
- def _file_to_chunks(
156
- input: dict[str, Any],
157
- field: str = "content",
158
- chunk_size: int = 1500,
159
- overlap: float = 0.1,
160
- threshold: int = 200,
161
- ) -> list[dict[str, Any]]:
162
- try:
163
- out = {key: value for key, value in input.items() if key != field} | {
164
- "chunk_overlap": overlap,
165
- "chunk_threshold": threshold,
166
- }
167
- chunks = TokenizeUtil.chunk_by_chars(
168
- input[field],
169
- chunk_size=chunk_size,
170
- overlap=overlap,
171
- threshold=threshold,
172
- )
173
- logs = []
174
- for i, chunk in enumerate(chunks):
175
- chunk_dict = out | {
176
- "file_chunks": len(chunks),
177
- "chunk_id": i + 1,
178
- "chunk_size": len(chunk),
179
- f"chunk_{field}": chunk,
180
- }
181
- logs.append(chunk_dict)
182
-
183
- return logs
184
-
185
- except Exception as e:
186
- raise ValueError(
187
- f"An error occurred while chunking the file. {e}"
188
- ) from e
189
-
190
-
191
- # needs doing TODO
192
- def file_to_chunks(
193
- input,
194
- # project='project',
195
- # output_dir='data/logs/sources/',
196
- chunk_func=_file_to_chunks,
197
- **kwargs,
198
- ):
199
- # out_to_csv=False,
200
- # filename=None,
201
- # verbose=True,
202
- # timestamp=True,
203
- # logger=None,
204
- return convert.to_list(
205
- func_call.lcall(input, chunk_func, **kwargs), flatten=True
206
- )
207
-
208
-
209
- def _datanode_parser(nodes, parser):
210
-
211
- try:
212
- return parser(nodes)
213
- except Exception as e:
214
- raise ValueError(f"Node parser {parser} failed. Error:{e}") from e