quantalogic 0.50.0__tar.gz → 0.50.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. {quantalogic-0.50.0 → quantalogic-0.50.2}/PKG-INFO +1 -74
  2. {quantalogic-0.50.0 → quantalogic-0.50.2}/pyproject.toml +117 -63
  3. quantalogic-0.50.2/quantalogic/tools/__init__.py +110 -0
  4. quantalogic-0.50.0/quantalogic/tools/__init__.py +0 -101
  5. {quantalogic-0.50.0 → quantalogic-0.50.2}/LICENSE +0 -0
  6. {quantalogic-0.50.0 → quantalogic-0.50.2}/README.md +0 -0
  7. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/__init__.py +0 -0
  8. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/agent.py +0 -0
  9. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/agent_config.py +0 -0
  10. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/agent_factory.py +0 -0
  11. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/coding_agent.py +0 -0
  12. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/config.py +0 -0
  13. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/console_print_events.py +0 -0
  14. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/console_print_token.py +0 -0
  15. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/docs_cli.py +0 -0
  16. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/event_emitter.py +0 -0
  17. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/flow/__init__.py +0 -0
  18. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/flow/flow.py +0 -0
  19. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/flow/flow_extractor.py +0 -0
  20. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/flow/flow_generator.py +0 -0
  21. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/flow/flow_manager.py +0 -0
  22. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/flow/flow_manager_schema.py +0 -0
  23. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/flow/flow_yaml.md +0 -0
  24. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/generative_model.py +0 -0
  25. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/get_model_info.py +0 -0
  26. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/interactive_text_editor.py +0 -0
  27. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/main.py +0 -0
  28. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/memory.py +0 -0
  29. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/model_info.py +0 -0
  30. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/model_info_list.py +0 -0
  31. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/model_info_litellm.py +0 -0
  32. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/model_names.py +0 -0
  33. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/prompts.py +0 -0
  34. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/quantlitellm.py +0 -0
  35. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/search_agent.py +0 -0
  36. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/server/__init__.py +0 -0
  37. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/server/agent_server.py +0 -0
  38. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/server/models.py +0 -0
  39. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/server/routes.py +0 -0
  40. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/server/state.py +0 -0
  41. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/server/static/js/event_visualizer.js +0 -0
  42. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/server/static/js/quantalogic.js +0 -0
  43. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/server/templates/index.html +0 -0
  44. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/task_file_reader.py +0 -0
  45. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/task_runner.py +0 -0
  46. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tool_manager.py +0 -0
  47. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/agent_tool.py +0 -0
  48. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/composio/composio.py +0 -0
  49. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/database/generate_database_report_tool.py +0 -0
  50. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/database/sql_query_tool_advanced.py +0 -0
  51. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/document_tools/markdown_to_docx_tool.py +0 -0
  52. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/document_tools/markdown_to_epub_tool.py +0 -0
  53. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/document_tools/markdown_to_html_tool.py +0 -0
  54. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/document_tools/markdown_to_ipynb_tool.py +0 -0
  55. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/document_tools/markdown_to_latex_tool.py +0 -0
  56. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/document_tools/markdown_to_pdf_tool.py +0 -0
  57. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/document_tools/markdown_to_pptx_tool.py +0 -0
  58. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/download_http_file_tool.py +0 -0
  59. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/duckduckgo_search_tool.py +0 -0
  60. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/edit_whole_content_tool.py +0 -0
  61. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/elixir_tool.py +0 -0
  62. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/execute_bash_command_tool.py +0 -0
  63. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/finance/alpha_vantage_tool.py +0 -0
  64. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/finance/ccxt_tool.py +0 -0
  65. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/finance/finance_llm_tool.py +0 -0
  66. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/finance/google_finance.py +0 -0
  67. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/finance/market_intelligence_tool.py +0 -0
  68. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/finance/technical_analysis_tool.py +0 -0
  69. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/finance/tradingview_tool.py +0 -0
  70. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/finance/yahoo_finance.py +0 -0
  71. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/git/bitbucket_clone_repo_tool.py +0 -0
  72. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/git/bitbucket_operations_tool.py +0 -0
  73. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/git/clone_repo_tool.py +0 -0
  74. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/git/git_operations_tool.py +0 -0
  75. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/google_packages/google_news_tool.py +0 -0
  76. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/grep_app_tool.py +0 -0
  77. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/image_generation/dalle_e.py +0 -0
  78. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/input_question_tool.py +0 -0
  79. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/jinja_tool.py +0 -0
  80. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/language_handlers/__init__.py +0 -0
  81. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/language_handlers/c_handler.py +0 -0
  82. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/language_handlers/cpp_handler.py +0 -0
  83. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/language_handlers/go_handler.py +0 -0
  84. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/language_handlers/java_handler.py +0 -0
  85. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/language_handlers/javascript_handler.py +0 -0
  86. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/language_handlers/python_handler.py +0 -0
  87. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/language_handlers/rust_handler.py +0 -0
  88. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/language_handlers/scala_handler.py +0 -0
  89. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/language_handlers/typescript_handler.py +0 -0
  90. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/list_directory_tool.py +0 -0
  91. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/llm_tool.py +0 -0
  92. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/llm_vision_tool.py +0 -0
  93. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/markitdown_tool.py +0 -0
  94. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/nasa_packages/models.py +0 -0
  95. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/nasa_packages/nasa_apod_tool.py +0 -0
  96. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/nasa_packages/nasa_neows_tool.py +0 -0
  97. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/nasa_packages/services.py +0 -0
  98. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/nodejs_tool.py +0 -0
  99. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/presentation_tools/presentation_llm_tool.py +0 -0
  100. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/product_hunt/product_hunt_tool.py +0 -0
  101. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/product_hunt/services.py +0 -0
  102. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/python_tool.py +0 -0
  103. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/rag_tool/__init__.py +0 -0
  104. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/rag_tool/document_metadata.py +0 -0
  105. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/rag_tool/query_response.py +0 -0
  106. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/rag_tool/rag_tool.py +0 -0
  107. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/rag_tool/rag_tool_beta.py +0 -0
  108. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/read_file_block_tool.py +0 -0
  109. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/read_file_tool.py +0 -0
  110. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/read_html_tool.py +0 -0
  111. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/replace_in_file_tool.py +0 -0
  112. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/ripgrep_tool.py +0 -0
  113. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/safe_python_interpreter_tool.py +0 -0
  114. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/search_definition_names.py +0 -0
  115. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/sequence_tool.py +0 -0
  116. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/serpapi_search_tool.py +0 -0
  117. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/sql_query_tool.py +0 -0
  118. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/task_complete_tool.py +0 -0
  119. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/tool.py +0 -0
  120. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/unified_diff_tool.py +0 -0
  121. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/utilities/csv_processor_tool.py +0 -0
  122. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/utilities/download_file_tool.py +0 -0
  123. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/utilities/mermaid_validator_tool.py +0 -0
  124. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/utils/__init__.py +0 -0
  125. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/utils/create_sample_database.py +0 -0
  126. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/utils/generate_database_report.py +0 -0
  127. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/wikipedia_search_tool.py +0 -0
  128. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/tools/write_file_tool.py +0 -0
  129. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/utils/__init__.py +0 -0
  130. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/utils/ask_user_validation.py +0 -0
  131. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/utils/async_utils.py +0 -0
  132. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/utils/check_version.py +0 -0
  133. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/utils/download_http_file.py +0 -0
  134. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/utils/get_all_models.py +0 -0
  135. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/utils/get_coding_environment.py +0 -0
  136. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/utils/get_environment.py +0 -0
  137. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/utils/get_quantalogic_rules_content.py +0 -0
  138. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/utils/git_ls.py +0 -0
  139. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/utils/lm_studio_model_info.py +0 -0
  140. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/utils/python_interpreter.py +0 -0
  141. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/utils/read_file.py +0 -0
  142. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/utils/read_http_text_content.py +0 -0
  143. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/utils/xml_utility.py +0 -0
  144. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/version.py +0 -0
  145. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/version_check.py +0 -0
  146. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/welcome_message.py +0 -0
  147. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/xml_parser.py +0 -0
  148. {quantalogic-0.50.0 → quantalogic-0.50.2}/quantalogic/xml_tool_parser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: quantalogic
3
- Version: 0.50.0
3
+ Version: 0.50.2
4
4
  Summary: QuantaLogic ReAct Agents
5
5
  Author: Raphaël MANSUY
6
6
  Author-email: raphael.mansuy@gmail.com
@@ -8,90 +8,17 @@ Requires-Python: >=3.12,<4.0
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: Programming Language :: Python :: 3.12
10
10
  Classifier: Programming Language :: Python :: 3.13
11
- Requires-Dist: beautifulsoup4 (>=4.12.3,<5.0.0)
12
- Requires-Dist: bibtexparser (>=1.4.3,<2.0.0)
13
- Requires-Dist: boto3 (>=1.35.86,<2.0.0)
14
- Requires-Dist: ccxt (>=4.4.61,<5.0.0)
15
- Requires-Dist: chromadb (>=0.6.3,<0.7.0)
16
11
  Requires-Dist: click (>=8.1.8,<9.0.0)
17
- Requires-Dist: composio (>=0.1.1,<0.2.0)
18
- Requires-Dist: duckduckgo-search (>=7.2.1,<8.0.0)
19
- Requires-Dist: ebooklib (>=0.18,<0.19)
20
- Requires-Dist: epub (>=0.5.2,<0.6.0)
21
- Requires-Dist: faiss-cpu (>=1.10.0,<2.0.0)
22
- Requires-Dist: faker (>=33.3.1,<34.0.0)
23
- Requires-Dist: fastapi (>=0.115.6,<0.116.0)
24
- Requires-Dist: fuzzywuzzy (>=0.18.0,<0.19.0)
25
- Requires-Dist: gitpython (>=3.1.44,<4.0.0)
26
- Requires-Dist: gnews (>=0.4.0,<0.5.0)
27
- Requires-Dist: google-auth (>=2.20.0,<3.0.0)
28
- Requires-Dist: google-search-results (>=2.4.2,<3.0.0)
29
- Requires-Dist: html2text (>=2024.2.26,<2025.0.0)
30
12
  Requires-Dist: instructor (>=1.7.2,<2.0.0)
31
- Requires-Dist: ipython (>=8.32.0,<9.0.0)
32
13
  Requires-Dist: jinja2 (>=3.1.5,<4.0.0)
33
14
  Requires-Dist: litellm (>=1.56.4,<2.0.0)
34
- Requires-Dist: llama-index (>=0.12.19,<0.13.0)
35
- Requires-Dist: llama-index-embeddings-bedrock (>=0.5.0,<0.6.0)
36
- Requires-Dist: llama-index-embeddings-huggingface (>=0.5.1,<0.6.0)
37
- Requires-Dist: llama-index-embeddings-instructor (>=0.3.0,<0.4.0)
38
- Requires-Dist: llama-index-embeddings-openai (>=0.3.1,<0.4.0)
39
- Requires-Dist: llama-index-vector-stores-chroma (>=0.4.1,<0.5.0)
40
- Requires-Dist: llama-index-vector-stores-faiss (>=0.3.0,<0.4.0)
41
- Requires-Dist: llmlingua (>=0.2.2,<0.3.0)
42
15
  Requires-Dist: loguru (>=0.7.3,<0.8.0)
43
- Requires-Dist: markdown (>=3.7,<4.0)
44
- Requires-Dist: markdownify (>=0.14.1,<0.15.0)
45
- Requires-Dist: markitdown (>=0.0.1a3,<0.0.2)
46
- Requires-Dist: mermaid-py (>=0.7.0,<0.8.0)
47
- Requires-Dist: mkdocs-git-revision-date-localized-plugin (>=1.2.0,<2.0.0)
48
- Requires-Dist: mkdocs-macros-plugin (>=1.0.4,<2.0.0)
49
- Requires-Dist: mkdocs-material[imaging] (>=9.5.49,<10.0.0)
50
- Requires-Dist: mkdocs-mermaid2-plugin (>=1.1.1,<2.0.0)
51
- Requires-Dist: mkdocs-minify-plugin (>=0.7.1,<0.8.0)
52
- Requires-Dist: mkdocstrings (>=0.24.0,<0.25.0)
53
- Requires-Dist: mkdocstrings-python (>=1.7.0,<2.0.0)
54
- Requires-Dist: nbformat (>=5.10.4,<6.0.0)
55
- Requires-Dist: networkx (>=3.4.2,<4.0.0)
56
- Requires-Dist: numpy (>=2.2.3,<3.0.0)
57
- Requires-Dist: pandas (>=2.2.3,<3.0.0)
58
16
  Requires-Dist: pathspec (>=0.12.1,<0.13.0)
59
- Requires-Dist: pillow (>=10.2,<11.0)
60
- Requires-Dist: pinecone-client (>=6.0.0,<7.0.0)
61
17
  Requires-Dist: prompt-toolkit (>=3.0.48,<4.0.0)
62
18
  Requires-Dist: pydantic (>=2.10.4,<3.0.0)
63
- Requires-Dist: pygments (>=2.19.1,<3.0.0)
64
- Requires-Dist: pymdown-extensions (>=10.3.1,<11.0.0)
65
- Requires-Dist: pypdf (>=5.3.0,<6.0.0)
66
- Requires-Dist: python-docx (>=1.1.2,<2.0.0)
67
- Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
68
- Requires-Dist: python-levenshtein (>=0.26.1,<0.27.0)
69
- Requires-Dist: python-multipart (>=0.0.20,<0.0.21)
70
- Requires-Dist: python-pptx (>=1.0.2,<2.0.0)
71
19
  Requires-Dist: requests (>=2.32.3,<3.0.0)
72
20
  Requires-Dist: rich (>=13.9.4,<14.0.0)
73
- Requires-Dist: serpapi (>=0.1.5,<0.2.0)
74
- Requires-Dist: sqlalchemy (>=2.0.37,<3.0.0)
75
- Requires-Dist: ta (>=0.11.0,<0.12.0)
76
21
  Requires-Dist: tenacity (>=9.0.0,<10.0.0)
77
- Requires-Dist: toml (>=0.10.2,<0.11.0)
78
- Requires-Dist: torch (>=2.6.0,<3.0.0)
79
- Requires-Dist: transformers (>=4.49.0,<5.0.0)
80
- Requires-Dist: tree-sitter (>=0.23.2,<0.24.0)
81
- Requires-Dist: tree-sitter-c (>=0.23.4,<0.24.0)
82
- Requires-Dist: tree-sitter-cpp (>=0.23.4,<0.24.0)
83
- Requires-Dist: tree-sitter-go (>=0.23.4,<0.24.0)
84
- Requires-Dist: tree-sitter-java (>=0.23.5,<0.24.0)
85
- Requires-Dist: tree-sitter-javascript (>=0.23.1,<0.24.0)
86
- Requires-Dist: tree-sitter-python (>=0.23.6,<0.24.0)
87
- Requires-Dist: tree-sitter-rust (>=0.23.2,<0.24.0)
88
- Requires-Dist: tree-sitter-scala (>=0.23.4,<0.24.0)
89
- Requires-Dist: tree-sitter-typescript (>=0.23.2,<0.24.0)
90
- Requires-Dist: types-requests (>=2.32.0.20241016,<3.0.0.0)
91
- Requires-Dist: uvicorn (>=0.34.0,<0.35.0)
92
- Requires-Dist: weasyprint (>=64.0,<65.0)
93
- Requires-Dist: websocket (>=0.2.1,<0.3.0)
94
- Requires-Dist: yfinance (>=0.2.53,<0.3.0)
95
22
  Description-Content-Type: text/markdown
96
23
 
97
24
  # QuantaLogic
@@ -1,18 +1,104 @@
1
1
  [tool.poetry]
2
2
  name = "quantalogic"
3
- version = "0.50.0"
3
+ version = "0.50.2"
4
4
  description = "QuantaLogic ReAct Agents"
5
5
  authors = ["Raphaël MANSUY <raphael.mansuy@gmail.com>"]
6
6
  readme = "README.md"
7
7
  packages = [{include = "quantalogic"}]
8
8
 
9
+ # Core dependencies required for the base Agent and ToolManager
9
10
  [tool.poetry.dependencies]
10
11
  python = "^3.12"
11
12
  pydantic = "^2.10.4"
12
13
  litellm = "^1.56.4"
13
14
  rich = "^13.9.4"
14
15
  loguru = "^0.7.3"
16
+ tenacity = "^9.0.0"
17
+ prompt-toolkit = "^3.0.48"
18
+ click = "^8.1.8"
19
+ jinja2 = "^3.1.5"
20
+ instructor = "^1.7.2"
21
+ requests = "^2.32.3"
22
+ pathspec = "^0.12.1"
23
+
24
+ # Optional group for file-related tools
25
+ [tool.poetry.group.file-tools]
26
+ optional = false
27
+
28
+ [tool.poetry.group.file-tools.dependencies]
29
+ python-dotenv = "^1.0.1"
30
+ gitpython = "^3.1.44"
31
+
32
+ # Optional group for search-related tools
33
+ [tool.poetry.group.search-tools]
34
+ optional = false
35
+
36
+ [tool.poetry.group.search-tools.dependencies]
37
+ duckduckgo-search = "^7.2.1"
38
+ google-search-results = "^2.4.2"
39
+ serpapi = "^0.1.5"
40
+
41
+ # Optional group for document conversion tools
42
+ [tool.poetry.group.document-tools]
43
+ optional = true
44
+
45
+ [tool.poetry.group.document-tools.dependencies]
46
+ markitdown = "^0.0.1a3"
47
+ weasyprint = "^64.0"
48
+ python-docx = "^1.1.2"
49
+ python-pptx = "^1.0.2"
50
+ pypdf = "^5.3.0"
51
+ ebooklib = "^0.18"
52
+ markdown = "^3.7"
53
+ pygments = "^2.19.1"
54
+ mermaid-py = "^0.7.0"
55
+ pillow = ">=10.2,<11.0"
56
+
57
+ # Optional group for database tools
58
+ [tool.poetry.group.database-tools]
59
+ optional = true
60
+
61
+ [tool.poetry.group.database-tools.dependencies]
62
+ sqlalchemy = "^2.0.37"
63
+ chromadb = "^0.6.3"
64
+ faiss-cpu = "^1.10.0"
65
+ pinecone-client = "^6.0.0"
66
+
67
+ # Optional group for LLM and AI-related tools
68
+ [tool.poetry.group.llm-tools]
69
+ optional = true
70
+
71
+ [tool.poetry.group.llm-tools.dependencies]
72
+ transformers = "^4.49.0"
73
+ torch = "^2.6.0"
74
+ llama-index = "^0.12.19"
75
+ llama-index-embeddings-openai = "^0.3.1"
76
+ llama-index-embeddings-huggingface = "^0.5.1"
77
+ llama-index-embeddings-instructor = "^0.3.0"
78
+ llama-index-embeddings-bedrock = "^0.5.0"
79
+ llama-index-vector-stores-chroma = "^0.4.1"
80
+ llama-index-vector-stores-faiss = "^0.3.0"
81
+ llmlingua = "^0.2.2"
82
+
83
+ # Optional group for web and API tools
84
+ [tool.poetry.group.web-tools]
85
+ optional = true
86
+
87
+ [tool.poetry.group.web-tools.dependencies]
15
88
  boto3 = "^1.35.86"
89
+ uvicorn = "^0.34.0"
90
+ fastapi = "^0.115.6"
91
+ websocket = "^0.2.1"
92
+
93
+ beautifulsoup4 = "^4.12.3"
94
+ html2text = "^2024.2.26"
95
+ python-multipart = "^0.0.20"
96
+
97
+ # Optional group for code parsing tools
98
+ [tool.poetry.group.code-parsing]
99
+ optional = false
100
+
101
+ [tool.poetry.group.code-parsing.dependencies]
16
102
  tree-sitter-python = "^0.23.6"
17
103
  tree-sitter = "^0.23.2"
18
104
  tree-sitter-javascript = "^0.23.1"
@@ -23,20 +109,12 @@ tree-sitter-go = "^0.23.4"
23
109
  tree-sitter-rust = "^0.23.2"
24
110
  tree-sitter-c = "^0.23.4"
25
111
  tree-sitter-cpp = "^0.23.4"
26
- markitdown = "^0.0.1a3"
27
- prompt-toolkit = "^3.0.48"
28
- uvicorn = "^0.34.0"
29
- fastapi = "^0.115.6"
30
- websocket = "^0.2.1"
31
- tenacity = "^9.0.0"
32
- google-auth = "^2.20.0"
33
- pathspec = "^0.12.1"
34
- click = "^8.1.8"
35
- toml = "^0.10.2"
36
- types-requests = "^2.32.0.20241016"
37
- google-search-results = "^2.4.2"
38
- serpapi = "^0.1.5"
39
- duckduckgo-search = "^7.2.1"
112
+
113
+ # Optional group for documentation tools
114
+ [tool.poetry.group.docs]
115
+ optional = true
116
+
117
+ [tool.poetry.group.docs.dependencies]
40
118
  mkdocs-material = {extras = ["imaging"], version = "^9.5.49"}
41
119
  mkdocs-mermaid2-plugin = "^1.1.1"
42
120
  mkdocs-minify-plugin = "^0.7.1"
@@ -45,59 +123,36 @@ mkdocs-macros-plugin = "^1.0.4"
45
123
  mkdocstrings = "^0.24.0"
46
124
  mkdocstrings-python = "^1.7.0"
47
125
  pymdown-extensions = "^10.3.1"
48
- llmlingua = "^0.2.2"
49
- jinja2 = "^3.1.5"
50
- beautifulsoup4 = "^4.12.3"
126
+ mkdocs = "^1.6.0"
127
+
128
+ # Optional group for additional utilities
129
+ [tool.poetry.group.utilities]
130
+ optional = true
131
+
132
+ [tool.poetry.group.utilities.dependencies]
133
+ google-auth = "^2.20.0"
134
+ toml = "^0.10.2"
135
+ types-requests = "^2.32.0.20241016"
51
136
  markdownify = "^0.14.1"
52
- requests = "^2.32.3"
53
- sqlalchemy = "^2.0.37"
54
- python-dotenv = "^1.0.1"
55
137
  networkx = "^3.4.2"
56
138
  faker = "^33.3.1"
57
139
  fuzzywuzzy = "^0.18.0"
58
140
  python-levenshtein = "^0.26.1"
59
- instructor = "^1.7.2"
60
141
  gnews = "^0.4.0"
61
142
  composio = "^0.1.1"
62
- html2text = "^2024.2.26"
63
- python-multipart = "^0.0.20"
64
- gitpython = "^3.1.44"
65
- python-docx = "^1.1.2"
66
- python-pptx = "^1.0.2"
67
- mermaid-py = "^0.7.0"
68
- pillow = ">=10.2,<11.0"
69
- markdown = "^3.7"
70
- weasyprint = "^64.0"
71
- pygments = "^2.19.1"
72
143
  bibtexparser = "^1.4.3"
73
- ebooklib = "^0.18"
74
144
  nbformat = "^5.10.4"
75
145
  ta = "^0.11.0"
76
146
  pandas = "^2.2.3"
77
147
  numpy = "^2.2.3"
78
148
  yfinance = "^0.2.53"
79
149
  ccxt = "^4.4.61"
80
- llama-index = "^0.12.19"
81
- chromadb = "^0.6.3"
82
- faiss-cpu = "^1.10.0"
83
- pinecone-client = "^6.0.0"
84
- transformers = "^4.49.0"
85
- torch = "^2.6.0"
86
- pypdf = "^5.3.0"
87
- epub = "^0.5.2"
88
- llama-index-embeddings-openai = "^0.3.1"
89
- llama-index-embeddings-huggingface = "^0.5.1"
90
- llama-index-embeddings-instructor = "^0.3.0"
91
- llama-index-embeddings-bedrock = "^0.5.0"
92
- llama-index-vector-stores-chroma = "^0.4.1"
93
- llama-index-vector-stores-faiss = "^0.3.0"
94
150
  ipython = "^8.32.0"
151
+ epub = "^0.5.2"
95
152
 
96
- [tool.poetry.scripts]
97
- quantalogic = "quantalogic.main:cli"
98
- docs-serve = "quantalogic.docs_cli:serve_docs"
99
- docs-build = "quantalogic.docs_cli:build_docs"
100
- docs-deploy = "quantalogic.docs_cli:deploy_docs"
153
+ # Development dependencies
154
+ [tool.poetry.group.dev]
155
+ optional = false
101
156
 
102
157
  [tool.poetry.group.dev.dependencies]
103
158
  ruff = "^0.8.4"
@@ -105,22 +160,20 @@ pytest = "^8.2.0"
105
160
  pytest-mock = "^3.14.0"
106
161
  litellm = "^1.55.9"
107
162
  ollama = "^0.4.4"
108
- mkdocs = "^1.6.0"
109
- mkdocs-material = "^9.5.0"
110
163
 
111
- [tool.poetry.group.docs.dependencies]
112
- mkdocs-material = {extras = ["imaging"], version = "^9.5.49"}
113
- mkdocs-mermaid2-plugin = "^1.1.1"
114
- mkdocs-git-revision-date-localized-plugin = "^1.2.0"
115
- mkdocs-macros-plugin = "^1.0.4"
116
- mkdocstrings = "^0.24.0"
117
- mkdocstrings-python = "^1.7.0"
118
- pymdown-extensions = "^10.3.1"
164
+ # Scripts for CLI and documentation
165
+ [tool.poetry.scripts]
166
+ quantalogic = "quantalogic.main:cli"
167
+ docs-serve = "quantalogic.docs_cli:serve_docs"
168
+ docs-build = "quantalogic.docs_cli:build_docs"
169
+ docs-deploy = "quantalogic.docs_cli:deploy_docs"
119
170
 
171
+ # Build system configuration
120
172
  [build-system]
121
173
  requires = ["poetry-core"]
122
174
  build-backend = "poetry.core.masonry.api"
123
175
 
176
+ # Ruff linting configuration
124
177
  [tool.ruff]
125
178
  target-version = "py312"
126
179
  line-length = 88
@@ -132,10 +185,11 @@ ignore = ["E501"]
132
185
  [tool.ruff.format]
133
186
  preview = true
134
187
 
188
+ # Pytest configuration
135
189
  [tool.pytest.ini_options]
136
190
  addopts = "-v"
137
191
  markers = [
138
192
  "integration: marks integration tests that require external services",
139
193
  "unit: marks unit tests"
140
194
  ]
141
- testpaths = ["tests"]
195
+ testpaths = ["tests"]
@@ -0,0 +1,110 @@
1
+ """Tools for the QuantaLogic agent."""
2
+
3
+ import importlib
4
+ import sys
5
+ from typing import Any, Dict
6
+
7
+
8
+ class LazyLoader:
9
+ """
10
+ Lazily import a module only when its attributes are accessed.
11
+ This helps reduce startup time by deferring imports until needed.
12
+ """
13
+ def __init__(self, module_path: str, optional: bool = False):
14
+ self.module_path = module_path
15
+ self._module = None
16
+ self.optional = optional
17
+
18
+ def __getattr__(self, name: str) -> Any:
19
+ if self._module is None:
20
+ try:
21
+ self._module = importlib.import_module(self.module_path)
22
+ except ImportError as e:
23
+ if self.optional:
24
+ # If the tool is optional, log a warning but don't raise an error
25
+ print(f"Warning: Optional tool {self.module_path} could not be imported: {e}")
26
+ return None
27
+ raise
28
+
29
+ return getattr(self._module, name)
30
+
31
+
32
+ # Map of tool names to their import paths and optional status
33
+ _TOOL_IMPORTS = {
34
+ "AgentTool": (".agent_tool", False),
35
+ "ComposioTool": (".composio.composio", False),
36
+ "GenerateDatabaseReportTool": (".database.generate_database_report_tool", False),
37
+ "SQLQueryToolAdvanced": (".database.sql_query_tool_advanced", False),
38
+ "MarkdownToDocxTool": (".document_tools.markdown_to_docx_tool", True),
39
+ "MarkdownToEpubTool": (".document_tools.markdown_to_epub_tool", True),
40
+ "MarkdownToHtmlTool": (".document_tools.markdown_to_html_tool", True),
41
+ "MarkdownToIpynbTool": (".document_tools.markdown_to_ipynb_tool", True),
42
+ "MarkdownToLatexTool": (".document_tools.markdown_to_latex_tool", True),
43
+ "MarkdownToPdfTool": (".document_tools.markdown_to_pdf_tool", True),
44
+ "MarkdownToPptxTool": (".document_tools.markdown_to_pptx_tool", True),
45
+ "DownloadHttpFileTool": (".download_http_file_tool", False),
46
+ "DuckDuckGoSearchTool": (".duckduckgo_search_tool", False),
47
+ "EditWholeContentTool": (".edit_whole_content_tool", False),
48
+ "ElixirTool": (".elixir_tool", False),
49
+ "ExecuteBashCommandTool": (".execute_bash_command_tool", False),
50
+ "BitbucketCloneTool": (".git.bitbucket_clone_repo_tool", False),
51
+ "BitbucketOperationsTool": (".git.bitbucket_operations_tool", False),
52
+ "CloneRepoTool": (".git.clone_repo_tool", False),
53
+ "GitOperationsTool": (".git.git_operations_tool", False),
54
+ "GoogleNewsTool": (".google_packages.google_news_tool", False),
55
+ "GrepAppTool": (".grep_app_tool", False),
56
+ "LLMImageGenerationTool": (".image_generation.dalle_e", False),
57
+ "InputQuestionTool": (".input_question_tool", False),
58
+ "JinjaTool": (".jinja_tool", False),
59
+ "ListDirectoryTool": (".list_directory_tool", False),
60
+ "LLMTool": (".llm_tool", False),
61
+ "LLMVisionTool": (".llm_vision_tool", False),
62
+ "MarkitdownTool": (".markitdown_tool", False),
63
+ "NasaApodTool": (".nasa_packages.nasa_apod_tool", False),
64
+ "NasaNeoWsTool": (".nasa_packages.nasa_neows_tool", False),
65
+ "NodeJsTool": (".nodejs_tool", False),
66
+ "PresentationLLMTool": (".presentation_tools.presentation_llm_tool", False),
67
+ "ProductHuntTool": (".product_hunt.product_hunt_tool", False),
68
+ "PythonTool": (".python_tool", False),
69
+ "RagTool": (".rag_tool.rag_tool", False),
70
+ "ReadFileBlockTool": (".read_file_block_tool", False),
71
+ "ReadFileTool": (".read_file_tool", False),
72
+ "ReadHTMLTool": (".read_html_tool", False),
73
+ "ReplaceInFileTool": (".replace_in_file_tool", False),
74
+ "RipgrepTool": (".ripgrep_tool", False),
75
+ "SafePythonInterpreterTool": (".safe_python_interpreter_tool", False),
76
+ "SearchDefinitionNames": (".search_definition_names", False),
77
+ "SequenceTool": (".sequence_tool", False),
78
+ "SerpApiSearchTool": (".serpapi_search_tool", False),
79
+ "SQLQueryTool": (".sql_query_tool", False),
80
+ "TaskCompleteTool": (".task_complete_tool", False),
81
+ "Tool": (".tool", False),
82
+ "ToolArgument": (".tool", False),
83
+ "UnifiedDiffTool": (".unified_diff_tool", False),
84
+ "CSVProcessorTool": (".utilities.csv_processor_tool", False),
85
+ "PrepareDownloadTool": (".utilities.download_file_tool", False),
86
+ "MermaidValidatorTool": (".utilities.mermaid_validator_tool", False),
87
+ "WikipediaSearchTool": (".wikipedia_search_tool", False),
88
+ "WriteFileTool": (".write_file_tool", False),
89
+ }
90
+
91
+ # Create lazy loaders for each module path
92
+ _lazy_modules: Dict[str, LazyLoader] = {}
93
+ for tool, (path, optional) in _TOOL_IMPORTS.items():
94
+ full_path = f"{__package__}{path}"
95
+ if full_path not in _lazy_modules:
96
+ _lazy_modules[full_path] = LazyLoader(full_path, optional)
97
+
98
+ # Set up attributes for lazy loading
99
+ _tools_to_lazy_modules = {}
100
+ for tool, (path, optional) in _TOOL_IMPORTS.items():
101
+ full_path = f"{__package__}{path}"
102
+ _tools_to_lazy_modules[tool] = _lazy_modules[full_path]
103
+
104
+ # Define __all__ so that import * works properly
105
+ __all__ = list(_TOOL_IMPORTS.keys())
106
+
107
+ # Set up lazy loading for each tool
108
+ for tool, lazy_module in _tools_to_lazy_modules.items():
109
+ # This will create properties that lazily load the requested tool
110
+ setattr(sys.modules[__name__], tool, getattr(lazy_module, tool))
@@ -1,101 +0,0 @@
1
- """Tools for the QuantaLogic agent."""
2
-
3
- import importlib
4
- import sys
5
- from typing import Any, Dict
6
-
7
-
8
- class LazyLoader:
9
- """
10
- Lazily import a module only when its attributes are accessed.
11
- This helps reduce startup time by deferring imports until needed.
12
- """
13
- def __init__(self, module_path: str):
14
- self.module_path = module_path
15
- self._module = None
16
-
17
- def __getattr__(self, name: str) -> Any:
18
- if self._module is None:
19
- self._module = importlib.import_module(self.module_path)
20
- return getattr(self._module, name)
21
-
22
-
23
- # Map of tool names to their import paths
24
- _TOOL_IMPORTS = {
25
- "AgentTool": ".agent_tool",
26
- "ComposioTool": ".composio.composio",
27
- "GenerateDatabaseReportTool": ".database.generate_database_report_tool",
28
- "SQLQueryToolAdvanced": ".database.sql_query_tool_advanced",
29
- "MarkdownToDocxTool": ".document_tools.markdown_to_docx_tool",
30
- "MarkdownToEpubTool": ".document_tools.markdown_to_epub_tool",
31
- "MarkdownToHtmlTool": ".document_tools.markdown_to_html_tool",
32
- "MarkdownToIpynbTool": ".document_tools.markdown_to_ipynb_tool",
33
- "MarkdownToLatexTool": ".document_tools.markdown_to_latex_tool",
34
- "MarkdownToPdfTool": ".document_tools.markdown_to_pdf_tool",
35
- "MarkdownToPptxTool": ".document_tools.markdown_to_pptx_tool",
36
- "DownloadHttpFileTool": ".download_http_file_tool",
37
- "DuckDuckGoSearchTool": ".duckduckgo_search_tool",
38
- "EditWholeContentTool": ".edit_whole_content_tool",
39
- "ElixirTool": ".elixir_tool",
40
- "ExecuteBashCommandTool": ".execute_bash_command_tool",
41
- "BitbucketCloneTool": ".git.bitbucket_clone_repo_tool",
42
- "BitbucketOperationsTool": ".git.bitbucket_operations_tool",
43
- "CloneRepoTool": ".git.clone_repo_tool",
44
- "GitOperationsTool": ".git.git_operations_tool",
45
- "GoogleNewsTool": ".google_packages.google_news_tool",
46
- "GrepAppTool": ".grep_app_tool",
47
- "LLMImageGenerationTool": ".image_generation.dalle_e",
48
- "InputQuestionTool": ".input_question_tool",
49
- "JinjaTool": ".jinja_tool",
50
- "ListDirectoryTool": ".list_directory_tool",
51
- "LLMTool": ".llm_tool",
52
- "LLMVisionTool": ".llm_vision_tool",
53
- "MarkitdownTool": ".markitdown_tool",
54
- "NasaApodTool": ".nasa_packages.nasa_apod_tool",
55
- "NasaNeoWsTool": ".nasa_packages.nasa_neows_tool",
56
- "NodeJsTool": ".nodejs_tool",
57
- "PresentationLLMTool": ".presentation_tools.presentation_llm_tool",
58
- "ProductHuntTool": ".product_hunt.product_hunt_tool",
59
- "PythonTool": ".python_tool",
60
- "RagTool": ".rag_tool.rag_tool",
61
- "ReadFileBlockTool": ".read_file_block_tool",
62
- "ReadFileTool": ".read_file_tool",
63
- "ReadHTMLTool": ".read_html_tool",
64
- "ReplaceInFileTool": ".replace_in_file_tool",
65
- "RipgrepTool": ".ripgrep_tool",
66
- "SafePythonInterpreterTool": ".safe_python_interpreter_tool",
67
- "SearchDefinitionNames": ".search_definition_names",
68
- "SequenceTool": ".sequence_tool",
69
- "SerpApiSearchTool": ".serpapi_search_tool",
70
- "SQLQueryTool": ".sql_query_tool",
71
- "TaskCompleteTool": ".task_complete_tool",
72
- "Tool": ".tool",
73
- "ToolArgument": ".tool",
74
- "UnifiedDiffTool": ".unified_diff_tool",
75
- "CSVProcessorTool": ".utilities.csv_processor_tool",
76
- "PrepareDownloadTool": ".utilities.download_file_tool",
77
- "MermaidValidatorTool": ".utilities.mermaid_validator_tool",
78
- "WikipediaSearchTool": ".wikipedia_search_tool",
79
- "WriteFileTool": ".write_file_tool",
80
- }
81
-
82
- # Create lazy loaders for each module path
83
- _lazy_modules: Dict[str, LazyLoader] = {}
84
- for tool, path in _TOOL_IMPORTS.items():
85
- full_path = f"{__package__}{path}"
86
- if full_path not in _lazy_modules:
87
- _lazy_modules[full_path] = LazyLoader(full_path)
88
-
89
- # Set up attributes for lazy loading
90
- _tools_to_lazy_modules = {}
91
- for tool, path in _TOOL_IMPORTS.items():
92
- full_path = f"{__package__}{path}"
93
- _tools_to_lazy_modules[tool] = _lazy_modules[full_path]
94
-
95
- # Define __all__ so that import * works properly
96
- __all__ = list(_TOOL_IMPORTS.keys())
97
-
98
- # Set up lazy loading for each tool
99
- for tool, lazy_module in _tools_to_lazy_modules.items():
100
- # This will create properties that lazily load the requested tool
101
- setattr(sys.modules[__name__], tool, getattr(lazy_module, tool))
File without changes
File without changes