quantalogic 0.50.12__tar.gz → 0.50.17__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 (163) hide show
  1. {quantalogic-0.50.12 → quantalogic-0.50.17}/PKG-INFO +1 -1
  2. {quantalogic-0.50.12 → quantalogic-0.50.17}/pyproject.toml +7 -1
  3. quantalogic-0.50.17/quantalogic/agent_config.py +262 -0
  4. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/agent_factory.py +12 -13
  5. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/coding_agent.py +1 -1
  6. quantalogic-0.50.17/quantalogic/create_custom_agent.py +254 -0
  7. quantalogic-0.50.17/quantalogic/tools/__init__.py +70 -0
  8. quantalogic-0.50.17/quantalogic/tools/composio/__init__.py +18 -0
  9. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/composio/composio.py +3 -48
  10. quantalogic-0.50.17/quantalogic/tools/database/__init__.py +20 -0
  11. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/database/sql_query_tool_advanced.py +5 -22
  12. quantalogic-0.50.17/quantalogic/tools/document_tools/__init__.py +30 -0
  13. quantalogic-0.50.17/quantalogic/tools/finance/__init__.py +32 -0
  14. quantalogic-0.50.17/quantalogic/tools/git/__init__.py +24 -0
  15. quantalogic-0.50.17/quantalogic/tools/google_packages/__init__.py +18 -0
  16. quantalogic-0.50.17/quantalogic/tools/image_generation/__init__.py +18 -0
  17. quantalogic-0.50.17/quantalogic/tools/nasa_packages/__init__.py +20 -0
  18. quantalogic-0.50.17/quantalogic/tools/presentation_tools/__init__.py +18 -0
  19. quantalogic-0.50.17/quantalogic/tools/product_hunt/__init__.py +18 -0
  20. quantalogic-0.50.17/quantalogic/tools/rag_tool/__init__.py +24 -0
  21. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/sql_query_tool.py +8 -25
  22. quantalogic-0.50.17/quantalogic/tools/utilities/__init__.py +22 -0
  23. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/utils/create_sample_database.py +7 -64
  24. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/utils/generate_database_report.py +2 -7
  25. quantalogic-0.50.12/quantalogic/agent_config.py +0 -485
  26. quantalogic-0.50.12/quantalogic/tools/__init__.py +0 -110
  27. quantalogic-0.50.12/quantalogic/tools/document_tools/__init__.py +0 -39
  28. quantalogic-0.50.12/quantalogic/tools/rag_tool/__init__.py +0 -48
  29. {quantalogic-0.50.12 → quantalogic-0.50.17}/LICENSE +0 -0
  30. {quantalogic-0.50.12 → quantalogic-0.50.17}/README.md +0 -0
  31. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/__init__.py +0 -0
  32. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/agent.py +0 -0
  33. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/config.py +0 -0
  34. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/console_print_events.py +0 -0
  35. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/console_print_token.py +0 -0
  36. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/docs_cli.py +0 -0
  37. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/event_emitter.py +0 -0
  38. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/flow/__init__.py +0 -0
  39. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/flow/flow.py +0 -0
  40. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/flow/flow_extractor.py +0 -0
  41. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/flow/flow_generator.py +0 -0
  42. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/flow/flow_manager.py +0 -0
  43. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/flow/flow_manager_schema.py +0 -0
  44. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/flow/flow_yaml.md +0 -0
  45. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/generative_model.py +0 -0
  46. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/get_model_info.py +0 -0
  47. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/interactive_text_editor.py +0 -0
  48. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/main.py +0 -0
  49. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/memory.py +0 -0
  50. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/model_info.py +0 -0
  51. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/model_info_list.py +0 -0
  52. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/model_info_litellm.py +0 -0
  53. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/model_names.py +0 -0
  54. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/prompts.py +0 -0
  55. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/quantlitellm.py +0 -0
  56. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/search_agent.py +0 -0
  57. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/server/__init__.py +0 -0
  58. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/server/agent_server.py +0 -0
  59. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/server/models.py +0 -0
  60. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/server/routes.py +0 -0
  61. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/server/state.py +0 -0
  62. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/server/static/js/event_visualizer.js +0 -0
  63. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/server/static/js/quantalogic.js +0 -0
  64. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/server/templates/index.html +0 -0
  65. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/task_file_reader.py +0 -0
  66. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/task_runner.py +0 -0
  67. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tool_manager.py +0 -0
  68. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/agent_tool.py +0 -0
  69. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/database/generate_database_report_tool.py +0 -0
  70. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/document_tools/markdown_to_docx_tool.py +0 -0
  71. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/document_tools/markdown_to_epub_tool.py +0 -0
  72. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/document_tools/markdown_to_html_tool.py +0 -0
  73. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/document_tools/markdown_to_ipynb_tool.py +0 -0
  74. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/document_tools/markdown_to_latex_tool.py +0 -0
  75. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/document_tools/markdown_to_pdf_tool.py +0 -0
  76. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/document_tools/markdown_to_pptx_tool.py +0 -0
  77. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/download_http_file_tool.py +0 -0
  78. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/duckduckgo_search_tool.py +0 -0
  79. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/edit_whole_content_tool.py +0 -0
  80. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/elixir_tool.py +0 -0
  81. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/execute_bash_command_tool.py +0 -0
  82. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/finance/alpha_vantage_tool.py +0 -0
  83. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/finance/ccxt_tool.py +0 -0
  84. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/finance/finance_llm_tool.py +0 -0
  85. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/finance/google_finance.py +0 -0
  86. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/finance/market_intelligence_tool.py +0 -0
  87. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/finance/technical_analysis_tool.py +0 -0
  88. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/finance/tradingview_tool.py +0 -0
  89. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/finance/yahoo_finance.py +0 -0
  90. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/git/bitbucket_clone_repo_tool.py +0 -0
  91. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/git/bitbucket_operations_tool.py +0 -0
  92. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/git/clone_repo_tool.py +0 -0
  93. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/git/git_operations_tool.py +0 -0
  94. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/google_packages/google_news_tool.py +0 -0
  95. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/grep_app_tool.py +0 -0
  96. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/image_generation/dalle_e.py +0 -0
  97. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/input_question_tool.py +0 -0
  98. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/jinja_tool.py +0 -0
  99. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/language_handlers/__init__.py +0 -0
  100. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/language_handlers/c_handler.py +0 -0
  101. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/language_handlers/cpp_handler.py +0 -0
  102. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/language_handlers/go_handler.py +0 -0
  103. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/language_handlers/java_handler.py +0 -0
  104. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/language_handlers/javascript_handler.py +0 -0
  105. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/language_handlers/python_handler.py +0 -0
  106. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/language_handlers/rust_handler.py +0 -0
  107. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/language_handlers/scala_handler.py +0 -0
  108. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/language_handlers/typescript_handler.py +0 -0
  109. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/list_directory_tool.py +0 -0
  110. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/llm_tool.py +0 -0
  111. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/llm_vision_tool.py +0 -0
  112. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/markitdown_tool.py +0 -0
  113. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/nasa_packages/models.py +0 -0
  114. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/nasa_packages/nasa_apod_tool.py +0 -0
  115. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/nasa_packages/nasa_neows_tool.py +0 -0
  116. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/nasa_packages/services.py +0 -0
  117. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/nodejs_tool.py +0 -0
  118. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/presentation_tools/presentation_llm_tool.py +0 -0
  119. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/product_hunt/product_hunt_tool.py +0 -0
  120. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/product_hunt/services.py +0 -0
  121. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/python_tool.py +0 -0
  122. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/rag_tool/document_metadata.py +0 -0
  123. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/rag_tool/query_response.py +0 -0
  124. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/rag_tool/rag_tool.py +0 -0
  125. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/rag_tool/rag_tool_beta.py +0 -0
  126. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/read_file_block_tool.py +0 -0
  127. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/read_file_tool.py +0 -0
  128. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/read_html_tool.py +0 -0
  129. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/replace_in_file_tool.py +0 -0
  130. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/ripgrep_tool.py +0 -0
  131. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/safe_python_interpreter_tool.py +0 -0
  132. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/search_definition_names.py +0 -0
  133. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/sequence_tool.py +0 -0
  134. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/serpapi_search_tool.py +0 -0
  135. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/task_complete_tool.py +0 -0
  136. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/tool.py +0 -0
  137. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/unified_diff_tool.py +0 -0
  138. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/utilities/csv_processor_tool.py +0 -0
  139. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/utilities/download_file_tool.py +0 -0
  140. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/utilities/mermaid_validator_tool.py +0 -0
  141. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/utils/__init__.py +0 -0
  142. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/wikipedia_search_tool.py +0 -0
  143. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/tools/write_file_tool.py +0 -0
  144. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/utils/__init__.py +0 -0
  145. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/utils/ask_user_validation.py +0 -0
  146. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/utils/async_utils.py +0 -0
  147. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/utils/check_version.py +0 -0
  148. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/utils/download_http_file.py +0 -0
  149. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/utils/get_all_models.py +0 -0
  150. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/utils/get_coding_environment.py +0 -0
  151. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/utils/get_environment.py +0 -0
  152. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/utils/get_quantalogic_rules_content.py +0 -0
  153. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/utils/git_ls.py +0 -0
  154. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/utils/lm_studio_model_info.py +0 -0
  155. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/utils/python_interpreter.py +0 -0
  156. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/utils/read_file.py +0 -0
  157. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/utils/read_http_text_content.py +0 -0
  158. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/utils/xml_utility.py +0 -0
  159. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/version.py +0 -0
  160. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/version_check.py +0 -0
  161. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/welcome_message.py +0 -0
  162. {quantalogic-0.50.12 → quantalogic-0.50.17}/quantalogic/xml_parser.py +0 -0
  163. {quantalogic-0.50.12 → quantalogic-0.50.17}/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.12
3
+ Version: 0.50.17
4
4
  Summary: QuantaLogic ReAct Agents
5
5
  Author: Raphaël MANSUY
6
6
  Author-email: raphael.mansuy@gmail.com
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "quantalogic"
3
- version = "0.50.12"
3
+ version = "0.50.17"
4
4
  description = "QuantaLogic ReAct Agents"
5
5
  authors = ["Raphaël MANSUY <raphael.mansuy@gmail.com>"]
6
6
  readme = "README.md"
@@ -30,6 +30,12 @@ optional = false
30
30
 
31
31
  [tool.poetry.group.file-tools.dependencies]
32
32
  python-dotenv = "^1.0.1"
33
+
34
+ # Optional group for git-related tools
35
+ [tool.poetry.group.git-tools]
36
+ optional = true
37
+
38
+ [tool.poetry.group.git-tools.dependencies]
33
39
  gitpython = "^3.1.44"
34
40
 
35
41
  # Optional group for search-related tools
@@ -0,0 +1,262 @@
1
+ """Module for agent configuration and creation."""
2
+
3
+ # Standard library imports
4
+
5
+ # Local application imports
6
+ import logging
7
+
8
+ from dotenv import load_dotenv
9
+
10
+ from quantalogic.agent import Agent
11
+ from quantalogic.console_print_token import console_print_token
12
+ from quantalogic.tools import (
13
+ AgentTool,
14
+ DownloadHttpFileTool,
15
+ DuckDuckGoSearchTool,
16
+ EditWholeContentTool,
17
+ ExecuteBashCommandTool,
18
+ InputQuestionTool,
19
+ ListDirectoryTool,
20
+ LLMTool,
21
+ LLMVisionTool,
22
+ MarkitdownTool,
23
+ NodeJsTool,
24
+ PythonTool,
25
+ ReadFileBlockTool,
26
+ ReadFileTool,
27
+ ReadHTMLTool,
28
+ ReplaceInFileTool,
29
+ RipgrepTool,
30
+ SearchDefinitionNames,
31
+ TaskCompleteTool,
32
+ WikipediaSearchTool,
33
+ WriteFileTool,
34
+ )
35
+ from quantalogic.tools.image_generation import LLMImageGenerationTool
36
+
37
+ load_dotenv()
38
+
39
+ MODEL_NAME = "deepseek/deepseek-chat"
40
+
41
+ logger = logging.getLogger(__name__)
42
+
43
+ _current_model_name: str = ""
44
+
45
+
46
+ def get_current_model() -> str:
47
+ """Retrieve the currently active model name."""
48
+ if not _current_model_name:
49
+ raise ValueError("No model initialized")
50
+ return _current_model_name
51
+
52
+
53
+ def create_agent(
54
+ model_name: str,
55
+ vision_model_name: str | None,
56
+ no_stream: bool = False,
57
+ compact_every_n_iteration: int | None = None,
58
+ max_tokens_working_memory: int | None = None,
59
+ ) -> Agent:
60
+ global _current_model_name
61
+ _current_model_name = model_name
62
+ """Create an agent with the specified model and tools.
63
+
64
+ Args:
65
+ model_name (str): Name of the model to use
66
+ vision_model_name (str | None): Name of the vision model to use
67
+ no_stream (bool, optional): If True, the agent will not stream results.
68
+ compact_every_n_iteration (int | None, optional): Frequency of memory compaction.
69
+ max_tokens_working_memory (int | None, optional): Maximum tokens for working memory.
70
+
71
+ Returns:
72
+ Agent: An agent with the specified model and tools
73
+ """
74
+ tools = [
75
+ TaskCompleteTool(),
76
+ ReadFileTool(),
77
+ ReadFileBlockTool(),
78
+ WriteFileTool(),
79
+ EditWholeContentTool(),
80
+ InputQuestionTool(),
81
+ ListDirectoryTool(),
82
+ ExecuteBashCommandTool(),
83
+ ReplaceInFileTool(),
84
+ RipgrepTool(),
85
+ SearchDefinitionNames(),
86
+ MarkitdownTool(),
87
+ LLMTool(model_name=model_name, on_token=console_print_token if not no_stream else None),
88
+ DownloadHttpFileTool(),
89
+ LLMImageGenerationTool(
90
+ provider="dall-e", model_name="openai/dall-e-3", on_token=console_print_token if not no_stream else None
91
+ ),
92
+ ReadHTMLTool(),
93
+ # SafePythonInterpreterTool(allowed_modules=["math", "numpy"])
94
+ ]
95
+
96
+ if vision_model_name:
97
+ tools.append(
98
+ LLMVisionTool(model_name=vision_model_name, on_token=console_print_token if not no_stream else None)
99
+ )
100
+
101
+ return Agent(
102
+ model_name=model_name,
103
+ tools=tools,
104
+ compact_every_n_iterations=compact_every_n_iteration,
105
+ max_tokens_working_memory=max_tokens_working_memory,
106
+ )
107
+
108
+
109
+ def create_interpreter_agent(
110
+ model_name: str,
111
+ vision_model_name: str | None,
112
+ no_stream: bool = False,
113
+ compact_every_n_iteration: int | None = None,
114
+ max_tokens_working_memory: int | None = None,
115
+ ) -> Agent:
116
+ """Create an interpreter agent with the specified model and tools.
117
+
118
+ Args:
119
+ model_name (str): Name of the model to use
120
+ vision_model_name (str | None): Name of the vision model to use
121
+ no_stream (bool, optional): If True, the agent will not stream results.
122
+ compact_every_n_iteration (int | None, optional): Frequency of memory compaction.
123
+ max_tokens_working_memory (int | None, optional): Maximum tokens for working memory.
124
+
125
+ Returns:
126
+ Agent: An interpreter agent with the specified model and tools
127
+ """
128
+ tools = [
129
+ TaskCompleteTool(),
130
+ ReadFileTool(),
131
+ ReadFileBlockTool(),
132
+ WriteFileTool(),
133
+ EditWholeContentTool(),
134
+ InputQuestionTool(),
135
+ ListDirectoryTool(),
136
+ ExecuteBashCommandTool(),
137
+ ReplaceInFileTool(),
138
+ RipgrepTool(),
139
+ PythonTool(),
140
+ NodeJsTool(),
141
+ SearchDefinitionNames(),
142
+ MarkitdownTool(),
143
+ LLMTool(model_name=model_name, on_token=console_print_token if not no_stream else None),
144
+ DownloadHttpFileTool(),
145
+ ReadHTMLTool(),
146
+ ]
147
+ return Agent(
148
+ model_name=model_name,
149
+ tools=tools,
150
+ compact_every_n_iterations=compact_every_n_iteration,
151
+ max_tokens_working_memory=max_tokens_working_memory,
152
+ )
153
+
154
+
155
+ def create_full_agent(
156
+ model_name: str,
157
+ vision_model_name: str | None,
158
+ no_stream: bool = False,
159
+ compact_every_n_iteration: int | None = None,
160
+ max_tokens_working_memory: int | None = None,
161
+ ) -> Agent:
162
+ """Create an agent with the specified model and many tools.
163
+
164
+ Args:
165
+ model_name (str): Name of the model to use
166
+ vision_model_name (str | None): Name of the vision model to use
167
+ no_stream (bool, optional): If True, the agent will not stream results.
168
+ compact_every_n_iteration (int | None, optional): Frequency of memory compaction.
169
+ max_tokens_working_memory (int | None, optional): Maximum tokens for working memory.
170
+
171
+ Returns:
172
+ Agent: An agent with the specified model and tools
173
+
174
+ """
175
+ tools = [
176
+ TaskCompleteTool(),
177
+ ReadFileTool(),
178
+ ReadFileBlockTool(),
179
+ WriteFileTool(),
180
+ EditWholeContentTool(),
181
+ InputQuestionTool(),
182
+ ListDirectoryTool(),
183
+ ExecuteBashCommandTool(),
184
+ ReplaceInFileTool(),
185
+ RipgrepTool(),
186
+ PythonTool(),
187
+ NodeJsTool(),
188
+ SearchDefinitionNames(),
189
+ MarkitdownTool(),
190
+ LLMTool(model_name=model_name, on_token=console_print_token if not no_stream else None),
191
+ DownloadHttpFileTool(),
192
+ WikipediaSearchTool(),
193
+ DuckDuckGoSearchTool(),
194
+ ReadHTMLTool(),
195
+ # SafePythonInterpreterTool(allowed_modules=["math", "numpy"])
196
+ ]
197
+
198
+ if vision_model_name:
199
+ tools.append(
200
+ LLMVisionTool(model_name=vision_model_name, on_token=console_print_token if not no_stream else None)
201
+ )
202
+
203
+ return Agent(
204
+ model_name=model_name,
205
+ tools=tools,
206
+ compact_every_n_iterations=compact_every_n_iteration,
207
+ max_tokens_working_memory=max_tokens_working_memory,
208
+ )
209
+
210
+
211
+ def create_basic_agent(
212
+ model_name: str,
213
+ vision_model_name: str | None = None,
214
+ no_stream: bool = False,
215
+ compact_every_n_iteration: int | None = None,
216
+ max_tokens_working_memory: int | None = None,
217
+ ) -> Agent:
218
+ """Create an agent with the specified model and tools.
219
+
220
+ Args:
221
+ model_name (str): Name of the model to use
222
+ vision_model_name (str | None): Name of the vision model to use
223
+ no_stream (bool, optional): If True, the agent will not stream results.
224
+ compact_every_n_iteration (int | None, optional): Frequency of memory compaction.
225
+ max_tokens_working_memory (int | None, optional): Maximum tokens for working memory.
226
+
227
+ Returns:
228
+ Agent: An agent with the specified model and tools
229
+ """
230
+ # Rebuild AgentTool to resolve forward references
231
+ AgentTool.model_rebuild()
232
+
233
+ tools = [
234
+ TaskCompleteTool(),
235
+ ListDirectoryTool(),
236
+ ReadFileBlockTool(),
237
+ SearchDefinitionNames(),
238
+ ReadFileTool(),
239
+ ReplaceInFileTool(),
240
+ WriteFileTool(),
241
+ EditWholeContentTool(),
242
+ ReplaceInFileTool(),
243
+ InputQuestionTool(),
244
+ ExecuteBashCommandTool(),
245
+ LLMTool(model_name=model_name, on_token=console_print_token if not no_stream else None),
246
+ ReadHTMLTool(),
247
+ # SafePythonInterpreterTool(allowed_modules=["math", "numpy"])
248
+ ]
249
+
250
+ if vision_model_name:
251
+ tools.append(
252
+ LLMVisionTool(model_name=vision_model_name, on_token=console_print_token if not no_stream else None)
253
+ )
254
+
255
+ return Agent(
256
+ model_name=model_name,
257
+ tools=tools,
258
+ compact_every_n_iterations=compact_every_n_iteration,
259
+ max_tokens_working_memory=max_tokens_working_memory,
260
+ )
261
+
262
+
@@ -5,7 +5,6 @@ from loguru import logger
5
5
  from quantalogic.agent import Agent
6
6
  from quantalogic.agent_config import (
7
7
  create_basic_agent,
8
- create_custom_agent,
9
8
  create_full_agent,
10
9
  create_interpreter_agent,
11
10
  )
@@ -171,17 +170,17 @@ def create_agent_for_mode(
171
170
  max_tokens_working_memory=max_tokens_working_memory,
172
171
  )
173
172
  return agent
174
- if mode == "custom":
175
- agent = create_custom_agent(
176
- model_name,
177
- vision_model_name,
178
- no_stream=no_stream,
179
- compact_every_n_iteration=compact_every_n_iteration,
180
- max_tokens_working_memory=max_tokens_working_memory,
181
- specific_expertise=specific_expertise,
182
- tools=tools,
183
- memory=memory
184
- )
185
- return agent
173
+ # if mode == "custom":
174
+ # agent = create_custom_agent(
175
+ # model_name,
176
+ # vision_model_name,
177
+ # no_stream=no_stream,
178
+ # compact_every_n_iteration=compact_every_n_iteration,
179
+ # max_tokens_working_memory=max_tokens_working_memory,
180
+ # specific_expertise=specific_expertise,
181
+ # tools=tools,
182
+ # memory=memory
183
+ # )
184
+ # return agent
186
185
  else:
187
186
  raise ValueError(f"Unknown agent mode: {mode}")
@@ -52,7 +52,7 @@ def create_coding_agent(
52
52
  specific_expertise = (
53
53
  "Software expert focused on pragmatic solutions."
54
54
  "Validates codebase pre/post changes."
55
- "Employs SearchDefinitionNames for code search; ReplaceInFileTool for updates."
55
+ "Employs SearchDefinitionNamesTool for code search; ReplaceInFileTool for updates."
56
56
  "Exercise caution with the surrounding context during search/replace operations."
57
57
  "For refactoring tasks, take the time to develop a comprehensive plan for implementing the proposed changes."
58
58
  )
@@ -0,0 +1,254 @@
1
+ # Import statements
2
+ # import os
3
+ # from typing import Any
4
+ # from loguru import logger
5
+ # from quantalogic.agent import Agent, AgentMemory
6
+ # from quantalogic.agent_tools import (
7
+ # AgentTool,
8
+ # DownloadHttpFileTool,
9
+ # DuckDuckGoSearchTool,
10
+ # EditWholeContentTool,
11
+ # ExecuteBashCommandTool,
12
+ # InputQuestionTool,
13
+ # ListDirectoryTool,
14
+ # LLMTool,
15
+ # LLMVisionTool,
16
+ # LLMImageGenerationTool,
17
+ # MarkitdownTool,
18
+ # NodeJsTool,
19
+ # PythonTool,
20
+ # ReadFileBlockTool,
21
+ # ReadFileTool,
22
+ # ReadHTMLTool,
23
+ # ReplaceInFileTool,
24
+ # RipgrepTool,
25
+ # SafePythonInterpreterTool,
26
+ # SearchDefinitionNames,
27
+ # TaskCompleteTool,
28
+ # WikipediaSearchTool,
29
+ # WriteFileTool,
30
+ # GoogleNewsTool,
31
+ # PresentationLLMTool,
32
+ # SequenceTool,
33
+ # SQLQueryTool,
34
+ # SQLQueryToolAdvanced,
35
+ # CloneRepoTool,
36
+ # BitbucketCloneTool,
37
+ # BitbucketOperationsTool,
38
+ # GitOperationsTool,
39
+ # MarkdownToPdfTool,
40
+ # MarkdownToPptxTool,
41
+ # MarkdownToHtmlTool,
42
+ # MarkdownToEpubTool,
43
+ # MarkdownToIpynbTool,
44
+ # MarkdownToLatexTool,
45
+ # MarkdownToDocxTool,
46
+ # CSVProcessorTool,
47
+ # MermaidValidatorTool,
48
+ # PrepareDownloadTool,
49
+ # ComposioTool,
50
+ # NasaNeoWsTool,
51
+ # NasaApodTool,
52
+ # ProductHuntTool,
53
+ # RagTool
54
+ # )
55
+ # from quantalogic.event_emitter import EventEmitter
56
+ # from quantalogic.console_token_printer import console_print_token
57
+
58
+ # Function to create a custom agent
59
+ # def create_custom_agent(
60
+ # model_name: str,
61
+ # vision_model_name: str | None = None,
62
+ # no_stream: bool = False,
63
+ # compact_every_n_iteration: int | None = None,
64
+ # max_tokens_working_memory: int | None = None,
65
+ # specific_expertise: str = "",
66
+ # tools: list[Any] | None = None,
67
+ # memory: AgentMemory | None = None
68
+ # ) -> Agent:
69
+ # """Create an agent with the specified model and tools.
70
+
71
+ # Args:
72
+ # model_name (str): Name of the model to use
73
+ # vision_model_name (str | None): Name of the vision model to use
74
+ # no_stream (bool, optional): If True, the agent will not stream results.
75
+ # compact_every_n_iteration (int | None, optional): Frequency of memory compaction.
76
+ # max_tokens_working_memory (int | None, optional): Maximum tokens for working memory.
77
+ # specific_expertise (str, optional): Specific expertise of the agent.
78
+ # tools (list[Any], optional): List of tool configurations to add to the agent.
79
+ # Each tool config should have:
80
+ # - type: str - The type of tool
81
+ # - parameters: dict - The parameters required for the tool
82
+ # memory (AgentMemory, optional): Memory object to use for the agent.
83
+
84
+ # Returns:
85
+ # Agent: An agent with the specified model and tools
86
+ # """
87
+ # # Create storage directory for RAG
88
+ # # storage_dir = os.path.join(os.path.dirname(__file__), "storage", "rag")
89
+ # # os.makedirs(storage_dir, exist_ok=True)
90
+
91
+ # # Rebuild AgentTool to resolve forward references
92
+ # # AgentTool.model_rebuild()
93
+
94
+ # # Create event emitter
95
+ # # event_emitter = EventEmitter()
96
+
97
+ # # Define tool mapping with their parameter requirements
98
+ # # tool_mapping = {
99
+ # # "llm": lambda params: LLMTool(
100
+ # # model_name=params.get("model_name", model_name),
101
+ # # on_token=console_print_token if not no_stream else None,
102
+ # # event_emitter=event_emitter
103
+ # # ),
104
+ # # "llm_vision": lambda params: LLMVisionTool(
105
+ # # model_name=params.get("vision_model_name") or vision_model_name,
106
+ # # on_token=console_print_token if not no_stream else None,
107
+ # # event_emitter=event_emitter
108
+ # # ),
109
+ # # "llm_image_generation": lambda params: LLMImageGenerationTool(
110
+ # # provider="dall-e",
111
+ # # model_name="openai/dall-e-3",
112
+ # # on_token=console_print_token if not no_stream else None,
113
+ # # ),
114
+ # # "download_http_file": lambda params: DownloadHttpFileTool(),
115
+ # # "duck_duck_go_search": lambda params: DuckDuckGoSearchTool(),
116
+ # # "edit_whole_content": lambda params: EditWholeContentTool(),
117
+ # # "execute_bash_command": lambda params: ExecuteBashCommandTool(),
118
+ # # "input_question": lambda params: InputQuestionTool(),
119
+ # # "list_directory": lambda params: ListDirectoryTool(),
120
+ # # "markitdown": lambda params: MarkitdownTool(),
121
+ # # "nodejs": lambda params: NodeJsTool(),
122
+ # # "python": lambda params: PythonTool(),
123
+ # # "read_file_block": lambda params: ReadFileBlockTool(),
124
+ # # "read_file": lambda params: ReadFileTool(),
125
+ # # "read_html": lambda params: ReadHTMLTool(),
126
+ # # "replace_in_file": lambda params: ReplaceInFileTool(),
127
+ # # "ripgrep": lambda params: RipgrepTool(),
128
+ # # "safe_python_interpreter": lambda params: SafePythonInterpreterTool(),
129
+ # # "search_definition_names": lambda params: SearchDefinitionNames(),
130
+ # # "wikipedia_search": lambda params: WikipediaSearchTool(),
131
+ # # "write_file": lambda params: WriteFileTool(),
132
+ # # "google_news": lambda params: GoogleNewsTool(
133
+ # # model_name=params.get("model_name", model_name),
134
+ # # on_token=console_print_token if not no_stream else None,
135
+ # # event_emitter=event_emitter
136
+ # # ),
137
+ # # "presentation_llm": lambda params: PresentationLLMTool(
138
+ # # model_name=params.get("model_name", model_name),
139
+ # # additional_info=params.get("additional_info", ""),
140
+ # # on_token=console_print_token if not no_stream else None,
141
+ # # event_emitter=event_emitter
142
+ # # ),
143
+ # # "sequence": lambda params: SequenceTool(
144
+ # # model_name=params.get("model_name", model_name),
145
+ # # on_token=console_print_token if not no_stream else None,
146
+ # # event_emitter=event_emitter
147
+ # # ),
148
+ # # "sql_query": lambda params: SQLQueryTool(
149
+ # # connection_string=params.get("connection_string", ""),
150
+ # # model_name=params.get("model_name", model_name),
151
+ # # on_token=console_print_token if not no_stream else None,
152
+ # # event_emitter=event_emitter
153
+ # # ),
154
+ # # "sql_query_advanced": lambda params: SQLQueryToolAdvanced(
155
+ # # connection_string=params.get("connection_string", ""),
156
+ # # model_name=params.get("model_name", model_name),
157
+ # # on_token=console_print_token if not no_stream else None,
158
+ # # event_emitter=event_emitter
159
+ # # ),
160
+ # # "clone_repo_tool": lambda params: CloneRepoTool(auth_token=params.get("auth_token", "")),
161
+ # # "bitbucket_clone_repo_tool": lambda params: BitbucketCloneTool(access_token=params.get("access_token", "")),
162
+ # # "bitbucket_operations_tool": lambda params: BitbucketOperationsTool(access_token=params.get("access_token", "")),
163
+ # # "git_operations_tool": lambda params: GitOperationsTool(auth_token=params.get("auth_token", "")),
164
+ # # "markdown_to_pdf": lambda params: MarkdownToPdfTool(),
165
+ # # "markdown_to_pptx": lambda params: MarkdownToPptxTool(),
166
+ # # "markdown_to_html": lambda params: MarkdownToHtmlTool(),
167
+ # # "markdown_to_epub": lambda params: MarkdownToEpubTool(),
168
+ # # "markdown_to_ipynb": lambda params: MarkdownToIpynbTool(),
169
+ # # "markdown_to_latex": lambda params: MarkdownToLatexTool(),
170
+ # # "markdown_to_docx": lambda params: MarkdownToDocxTool(),
171
+ # # "csv_processor": lambda params: CSVProcessorTool(),
172
+ # # "mermaid_validator_tool": lambda params: MermaidValidatorTool(),
173
+ # # "download_file_tool": lambda params: PrepareDownloadTool(),
174
+ # # "email_tool": lambda params: ComposioTool(
175
+ # # action="GMAIL_SEND_EMAIL",
176
+ # # name="email_tool",
177
+ # # description="Send emails via Gmail",
178
+ # # need_validation=False
179
+ # # ),
180
+ # # "callendar_tool": lambda params: ComposioTool(
181
+ # # action="GOOGLECALENDAR_CREATE_EVENT",
182
+ # # name="callendar_tool",
183
+ # # description="Create events in Google Calendar",
184
+ # # need_validation=False
185
+ # # ),
186
+ # # "weather_tool": lambda params: ComposioTool(
187
+ # # action="WEATHERMAP_WEATHER",
188
+ # # name="weather_tool",
189
+ # # description="Get weather information for a location"
190
+ # # ),
191
+ # # "nasa_neows_tool": lambda params: NasaNeoWsTool(),
192
+ # # "nasa_apod_tool": lambda params: NasaApodTool(),
193
+ # # "product_hunt_tool": lambda params : ProductHuntTool(),
194
+ # # "rag_tool": lambda params: RagTool(
195
+ # # vector_store=params.get("vector_store", "chroma"),
196
+ # # embedding_model=params.get("embedding_model", "openai"),
197
+ # # persist_dir=storage_dir,
198
+ # # document_paths=params.get("document_paths", [])
199
+ # # )
200
+ # # }
201
+
202
+ # # Define write tools that should trigger automatic download tool addition
203
+ # # write_tools = {"write_file", "edit_whole_content", "replace_in_file"}
204
+
205
+ # # Initialize agent tools list
206
+ # # agent_tools = []
207
+ # # Check if any write tools are present
208
+ # # has_write_tool = any(
209
+ # # tool_config.get("type") in write_tools
210
+ # # for tool_config in (tools or [])
211
+ # # )
212
+
213
+ # # Add tools only if they are provided
214
+ # # if tools:
215
+ # # for tool_config in tools:
216
+ # # tool_type = tool_config.get("type")
217
+ # # logger.debug(f"Processing tool type: {tool_type}")
218
+
219
+ # # if tool_type in tool_mapping:
220
+ # # try:
221
+ # # # Get tool parameters or empty dict if not provided
222
+ # # tool_params = tool_config.get("parameters", {})
223
+
224
+ # # # Create tool instance with parameters
225
+ # # tool = tool_mapping[tool_type](tool_params)
226
+ # # logger.debug(f"Created tool instance: {tool}")
227
+
228
+ # # if tool: # Some tools (like llm_vision) might return None
229
+ # # agent_tools.append(tool)
230
+ # # logger.info(f"Added tool: {tool_type}")
231
+ # # except Exception as e:
232
+ # # logger.error(f"Failed to create tool {tool_type}: {str(e)}")
233
+
234
+ # # If any write tool was added, also add the download tool
235
+ # # if has_write_tool:
236
+ # # try:
237
+ # # agent_tools.append(PrepareDownloadTool())
238
+ # # logger.info("Added download tool automatically")
239
+ # # except Exception as e:
240
+ # # logger.error(f"Failed to add download tool: {str(e)}")
241
+
242
+ # # Always add TaskCompleteTool
243
+ # # agent_tools.append(TaskCompleteTool())
244
+
245
+ # # Return the configured Agent
246
+ # # return Agent(
247
+ # # model_name=model_name,
248
+ # # tools=agent_tools,
249
+ # # event_emitter=event_emitter,
250
+ # # compact_every_n_iterations=compact_every_n_iteration,
251
+ # # max_tokens_working_memory=max_tokens_working_memory,
252
+ # # specific_expertise=specific_expertise,
253
+ # # memory=memory,
254
+ # # )
@@ -0,0 +1,70 @@
1
+ """Tools for the QuantaLogic agent."""
2
+
3
+ from loguru import logger
4
+
5
+ # Direct imports of tools
6
+ from .agent_tool import AgentTool
7
+ from .download_http_file_tool import DownloadHttpFileTool
8
+ from .duckduckgo_search_tool import DuckDuckGoSearchTool
9
+ from .edit_whole_content_tool import EditWholeContentTool
10
+ from .elixir_tool import ElixirTool
11
+ from .execute_bash_command_tool import ExecuteBashCommandTool
12
+ from .grep_app_tool import GrepAppTool
13
+ from .input_question_tool import InputQuestionTool
14
+ from .jinja_tool import JinjaTool
15
+ from .list_directory_tool import ListDirectoryTool
16
+ from .llm_tool import LLMTool
17
+ from .llm_vision_tool import LLMVisionTool
18
+ from .markitdown_tool import MarkitdownTool
19
+ from .nodejs_tool import NodeJsTool
20
+ from .python_tool import PythonTool
21
+ from .read_file_block_tool import ReadFileBlockTool
22
+ from .read_file_tool import ReadFileTool
23
+ from .read_html_tool import ReadHTMLTool
24
+ from .replace_in_file_tool import ReplaceInFileTool
25
+ from .ripgrep_tool import RipgrepTool
26
+ from .safe_python_interpreter_tool import SafePythonInterpreterTool
27
+ from .search_definition_names import SearchDefinitionNames
28
+ from .sequence_tool import SequenceTool
29
+ from .serpapi_search_tool import SerpApiSearchTool
30
+ from .sql_query_tool import SQLQueryTool
31
+ from .task_complete_tool import TaskCompleteTool
32
+ from .tool import Tool, ToolArgument
33
+ from .unified_diff_tool import UnifiedDiffTool
34
+ from .wikipedia_search_tool import WikipediaSearchTool
35
+ from .write_file_tool import WriteFileTool
36
+
37
+ # Define __all__ to control what gets imported with `from quantalogic.tools import *`
38
+ __all__ = [
39
+ 'AgentTool',
40
+ 'DownloadHttpFileTool',
41
+ 'DuckDuckGoSearchTool',
42
+ 'EditWholeContentTool',
43
+ 'ElixirTool',
44
+ 'ExecuteBashCommandTool',
45
+ 'GrepAppTool',
46
+ 'InputQuestionTool',
47
+ 'JinjaTool',
48
+ 'ListDirectoryTool',
49
+ 'LLMTool',
50
+ 'LLMVisionTool',
51
+ 'MarkitdownTool',
52
+ 'NodeJsTool',
53
+ 'PythonTool',
54
+ 'ReadFileBlockTool',
55
+ 'ReadFileTool',
56
+ 'ReadHTMLTool',
57
+ 'ReplaceInFileTool',
58
+ 'RipgrepTool',
59
+ 'SafePythonInterpreterTool',
60
+ 'SearchDefinitionNames',
61
+ 'SequenceTool',
62
+ 'SerpApiSearchTool',
63
+ 'SQLQueryTool',
64
+ 'TaskCompleteTool',
65
+ 'Tool',
66
+ 'ToolArgument',
67
+ 'UnifiedDiffTool',
68
+ 'WikipediaSearchTool',
69
+ 'WriteFileTool'
70
+ ]
@@ -0,0 +1,18 @@
1
+ """
2
+ Composio Tools Module
3
+
4
+ This module provides tools and utilities from the Composio integration.
5
+ """
6
+
7
+ from loguru import logger
8
+
9
+ # Explicit imports of all tools in the module
10
+ from .composio import ComposioTool
11
+
12
+ # Define __all__ to control what is imported with `from ... import *`
13
+ __all__ = [
14
+ 'ComposioTool',
15
+ ]
16
+
17
+ # Optional: Add logging for import confirmation
18
+ logger.info("Composio tools module initialized successfully.")