quantalogic 0.50.1__tar.gz → 0.50.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. {quantalogic-0.50.1 → quantalogic-0.50.3}/PKG-INFO +4 -1
  2. {quantalogic-0.50.1 → quantalogic-0.50.3}/pyproject.toml +13 -5
  3. quantalogic-0.50.3/quantalogic/tools/__init__.py +110 -0
  4. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/composio/composio.py +20 -2
  5. quantalogic-0.50.1/quantalogic/tools/__init__.py +0 -101
  6. {quantalogic-0.50.1 → quantalogic-0.50.3}/LICENSE +0 -0
  7. {quantalogic-0.50.1 → quantalogic-0.50.3}/README.md +0 -0
  8. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/__init__.py +0 -0
  9. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/agent.py +0 -0
  10. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/agent_config.py +0 -0
  11. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/agent_factory.py +0 -0
  12. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/coding_agent.py +0 -0
  13. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/config.py +0 -0
  14. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/console_print_events.py +0 -0
  15. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/console_print_token.py +0 -0
  16. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/docs_cli.py +0 -0
  17. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/event_emitter.py +0 -0
  18. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/flow/__init__.py +0 -0
  19. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/flow/flow.py +0 -0
  20. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/flow/flow_extractor.py +0 -0
  21. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/flow/flow_generator.py +0 -0
  22. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/flow/flow_manager.py +0 -0
  23. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/flow/flow_manager_schema.py +0 -0
  24. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/flow/flow_yaml.md +0 -0
  25. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/generative_model.py +0 -0
  26. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/get_model_info.py +0 -0
  27. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/interactive_text_editor.py +0 -0
  28. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/main.py +0 -0
  29. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/memory.py +0 -0
  30. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/model_info.py +0 -0
  31. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/model_info_list.py +0 -0
  32. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/model_info_litellm.py +0 -0
  33. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/model_names.py +0 -0
  34. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/prompts.py +0 -0
  35. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/quantlitellm.py +0 -0
  36. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/search_agent.py +0 -0
  37. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/server/__init__.py +0 -0
  38. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/server/agent_server.py +0 -0
  39. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/server/models.py +0 -0
  40. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/server/routes.py +0 -0
  41. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/server/state.py +0 -0
  42. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/server/static/js/event_visualizer.js +0 -0
  43. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/server/static/js/quantalogic.js +0 -0
  44. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/server/templates/index.html +0 -0
  45. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/task_file_reader.py +0 -0
  46. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/task_runner.py +0 -0
  47. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tool_manager.py +0 -0
  48. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/agent_tool.py +0 -0
  49. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/database/generate_database_report_tool.py +0 -0
  50. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/database/sql_query_tool_advanced.py +0 -0
  51. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/document_tools/markdown_to_docx_tool.py +0 -0
  52. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/document_tools/markdown_to_epub_tool.py +0 -0
  53. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/document_tools/markdown_to_html_tool.py +0 -0
  54. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/document_tools/markdown_to_ipynb_tool.py +0 -0
  55. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/document_tools/markdown_to_latex_tool.py +0 -0
  56. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/document_tools/markdown_to_pdf_tool.py +0 -0
  57. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/document_tools/markdown_to_pptx_tool.py +0 -0
  58. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/download_http_file_tool.py +0 -0
  59. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/duckduckgo_search_tool.py +0 -0
  60. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/edit_whole_content_tool.py +0 -0
  61. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/elixir_tool.py +0 -0
  62. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/execute_bash_command_tool.py +0 -0
  63. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/finance/alpha_vantage_tool.py +0 -0
  64. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/finance/ccxt_tool.py +0 -0
  65. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/finance/finance_llm_tool.py +0 -0
  66. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/finance/google_finance.py +0 -0
  67. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/finance/market_intelligence_tool.py +0 -0
  68. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/finance/technical_analysis_tool.py +0 -0
  69. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/finance/tradingview_tool.py +0 -0
  70. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/finance/yahoo_finance.py +0 -0
  71. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/git/bitbucket_clone_repo_tool.py +0 -0
  72. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/git/bitbucket_operations_tool.py +0 -0
  73. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/git/clone_repo_tool.py +0 -0
  74. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/git/git_operations_tool.py +0 -0
  75. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/google_packages/google_news_tool.py +0 -0
  76. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/grep_app_tool.py +0 -0
  77. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/image_generation/dalle_e.py +0 -0
  78. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/input_question_tool.py +0 -0
  79. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/jinja_tool.py +0 -0
  80. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/language_handlers/__init__.py +0 -0
  81. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/language_handlers/c_handler.py +0 -0
  82. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/language_handlers/cpp_handler.py +0 -0
  83. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/language_handlers/go_handler.py +0 -0
  84. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/language_handlers/java_handler.py +0 -0
  85. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/language_handlers/javascript_handler.py +0 -0
  86. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/language_handlers/python_handler.py +0 -0
  87. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/language_handlers/rust_handler.py +0 -0
  88. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/language_handlers/scala_handler.py +0 -0
  89. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/language_handlers/typescript_handler.py +0 -0
  90. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/list_directory_tool.py +0 -0
  91. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/llm_tool.py +0 -0
  92. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/llm_vision_tool.py +0 -0
  93. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/markitdown_tool.py +0 -0
  94. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/nasa_packages/models.py +0 -0
  95. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/nasa_packages/nasa_apod_tool.py +0 -0
  96. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/nasa_packages/nasa_neows_tool.py +0 -0
  97. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/nasa_packages/services.py +0 -0
  98. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/nodejs_tool.py +0 -0
  99. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/presentation_tools/presentation_llm_tool.py +0 -0
  100. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/product_hunt/product_hunt_tool.py +0 -0
  101. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/product_hunt/services.py +0 -0
  102. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/python_tool.py +0 -0
  103. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/rag_tool/__init__.py +0 -0
  104. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/rag_tool/document_metadata.py +0 -0
  105. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/rag_tool/query_response.py +0 -0
  106. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/rag_tool/rag_tool.py +0 -0
  107. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/rag_tool/rag_tool_beta.py +0 -0
  108. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/read_file_block_tool.py +0 -0
  109. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/read_file_tool.py +0 -0
  110. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/read_html_tool.py +0 -0
  111. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/replace_in_file_tool.py +0 -0
  112. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/ripgrep_tool.py +0 -0
  113. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/safe_python_interpreter_tool.py +0 -0
  114. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/search_definition_names.py +0 -0
  115. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/sequence_tool.py +0 -0
  116. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/serpapi_search_tool.py +0 -0
  117. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/sql_query_tool.py +0 -0
  118. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/task_complete_tool.py +0 -0
  119. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/tool.py +0 -0
  120. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/unified_diff_tool.py +0 -0
  121. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/utilities/csv_processor_tool.py +0 -0
  122. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/utilities/download_file_tool.py +0 -0
  123. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/utilities/mermaid_validator_tool.py +0 -0
  124. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/utils/__init__.py +0 -0
  125. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/utils/create_sample_database.py +0 -0
  126. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/utils/generate_database_report.py +0 -0
  127. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/wikipedia_search_tool.py +0 -0
  128. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/tools/write_file_tool.py +0 -0
  129. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/utils/__init__.py +0 -0
  130. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/utils/ask_user_validation.py +0 -0
  131. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/utils/async_utils.py +0 -0
  132. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/utils/check_version.py +0 -0
  133. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/utils/download_http_file.py +0 -0
  134. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/utils/get_all_models.py +0 -0
  135. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/utils/get_coding_environment.py +0 -0
  136. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/utils/get_environment.py +0 -0
  137. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/utils/get_quantalogic_rules_content.py +0 -0
  138. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/utils/git_ls.py +0 -0
  139. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/utils/lm_studio_model_info.py +0 -0
  140. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/utils/python_interpreter.py +0 -0
  141. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/utils/read_file.py +0 -0
  142. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/utils/read_http_text_content.py +0 -0
  143. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/utils/xml_utility.py +0 -0
  144. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/version.py +0 -0
  145. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/version_check.py +0 -0
  146. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/welcome_message.py +0 -0
  147. {quantalogic-0.50.1 → quantalogic-0.50.3}/quantalogic/xml_parser.py +0 -0
  148. {quantalogic-0.50.1 → quantalogic-0.50.3}/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.1
3
+ Version: 0.50.3
4
4
  Summary: QuantaLogic ReAct Agents
5
5
  Author: Raphaël MANSUY
6
6
  Author-email: raphael.mansuy@gmail.com
@@ -9,11 +9,14 @@ Classifier: Programming Language :: Python :: 3
9
9
  Classifier: Programming Language :: Python :: 3.12
10
10
  Classifier: Programming Language :: Python :: 3.13
11
11
  Requires-Dist: click (>=8.1.8,<9.0.0)
12
+ Requires-Dist: instructor (>=1.7.2,<2.0.0)
12
13
  Requires-Dist: jinja2 (>=3.1.5,<4.0.0)
13
14
  Requires-Dist: litellm (>=1.56.4,<2.0.0)
14
15
  Requires-Dist: loguru (>=0.7.3,<0.8.0)
16
+ Requires-Dist: pathspec (>=0.12.1,<0.13.0)
15
17
  Requires-Dist: prompt-toolkit (>=3.0.48,<4.0.0)
16
18
  Requires-Dist: pydantic (>=2.10.4,<3.0.0)
19
+ Requires-Dist: requests (>=2.32.3,<3.0.0)
17
20
  Requires-Dist: rich (>=13.9.4,<14.0.0)
18
21
  Requires-Dist: tenacity (>=9.0.0,<10.0.0)
19
22
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "quantalogic"
3
- version = "0.50.1"
3
+ version = "0.50.3"
4
4
  description = "QuantaLogic ReAct Agents"
5
5
  authors = ["Raphaël MANSUY <raphael.mansuy@gmail.com>"]
6
6
  readme = "README.md"
@@ -17,6 +17,9 @@ tenacity = "^9.0.0"
17
17
  prompt-toolkit = "^3.0.48"
18
18
  click = "^8.1.8"
19
19
  jinja2 = "^3.1.5"
20
+ instructor = "^1.7.2"
21
+ requests = "^2.32.3"
22
+ pathspec = "^0.12.1"
20
23
 
21
24
  # Optional group for file-related tools
22
25
  [tool.poetry.group.file-tools]
@@ -76,7 +79,6 @@ llama-index-embeddings-bedrock = "^0.5.0"
76
79
  llama-index-vector-stores-chroma = "^0.4.1"
77
80
  llama-index-vector-stores-faiss = "^0.3.0"
78
81
  llmlingua = "^0.2.2"
79
- instructor = "^1.7.2"
80
82
 
81
83
  # Optional group for web and API tools
82
84
  [tool.poetry.group.web-tools]
@@ -87,7 +89,7 @@ boto3 = "^1.35.86"
87
89
  uvicorn = "^0.34.0"
88
90
  fastapi = "^0.115.6"
89
91
  websocket = "^0.2.1"
90
- requests = "^2.32.3"
92
+
91
93
  beautifulsoup4 = "^4.12.3"
92
94
  html2text = "^2024.2.26"
93
95
  python-multipart = "^0.0.20"
@@ -123,12 +125,18 @@ mkdocstrings-python = "^1.7.0"
123
125
  pymdown-extensions = "^10.3.1"
124
126
  mkdocs = "^1.6.0"
125
127
 
128
+ # Optional group for Composio integration
129
+ [tool.poetry.group.composio-tools]
130
+ optional = true
131
+
132
+ [tool.poetry.group.composio-tools.dependencies]
133
+ composio = "^0.1.1"
134
+
126
135
  # Optional group for additional utilities
127
136
  [tool.poetry.group.utilities]
128
137
  optional = true
129
138
 
130
139
  [tool.poetry.group.utilities.dependencies]
131
- pathspec = "^0.12.1"
132
140
  google-auth = "^2.20.0"
133
141
  toml = "^0.10.2"
134
142
  types-requests = "^2.32.0.20241016"
@@ -138,7 +146,7 @@ faker = "^33.3.1"
138
146
  fuzzywuzzy = "^0.18.0"
139
147
  python-levenshtein = "^0.26.1"
140
148
  gnews = "^0.4.0"
141
- composio = "^0.1.1"
149
+
142
150
  bibtexparser = "^1.4.3"
143
151
  nbformat = "^5.10.4"
144
152
  ta = "^0.11.0"
@@ -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", True),
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))
@@ -4,12 +4,24 @@ import json
4
4
  import os
5
5
  import traceback
6
6
  from datetime import datetime
7
- from typing import Any, Dict, Optional
7
+ from typing import Any, Dict, Optional, Union
8
8
 
9
- from composio import Action, ComposioToolSet
10
9
  from loguru import logger
11
10
  from pydantic import BaseModel, ConfigDict, Field
12
11
 
12
+ # Try to import composio, but don't fail if it's not installed
13
+ try:
14
+ from composio import Action, ComposioToolSet
15
+ COMPOSIO_AVAILABLE = True
16
+ except ImportError:
17
+ logger.warning("composio module not installed. ComposioTool will not be available.")
18
+ COMPOSIO_AVAILABLE = False
19
+ # Create dummy classes to avoid errors
20
+ class Action:
21
+ pass
22
+ class ComposioToolSet:
23
+ pass
24
+
13
25
  from quantalogic.tools.tool import Tool, ToolArgument
14
26
 
15
27
 
@@ -96,6 +108,12 @@ class ComposioTool(Tool):
96
108
  need_validation: Whether this specific instance needs validation
97
109
  **data: Additional data for tool initialization
98
110
  """
111
+ # Check if composio is available
112
+ if not COMPOSIO_AVAILABLE:
113
+ logger.error("ComposioTool cannot be initialized: composio module is not installed")
114
+ raise ImportError("The 'composio' package is required to use ComposioTool. "
115
+ "Install it with 'pip install composio' or include it in your dependencies.")
116
+
99
117
  logger.info(f"Initializing ComposioTool for action: {action}")
100
118
  start_time = datetime.now()
101
119
 
@@ -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