iatoolkit 2.10.0__tar.gz → 2.11.0__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 (237) hide show
  1. {iatoolkit-2.10.0/src/iatoolkit.egg-info → iatoolkit-2.11.0}/PKG-INFO +2 -1
  2. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/requirements.txt +1 -0
  3. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/__init__.py +1 -1
  4. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/common/interfaces/database_provider.py +9 -1
  5. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt +1 -1
  6. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/sql_core.prompt +4 -1
  7. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +1 -1
  8. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts_pack.yaml +20 -2
  9. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/repositories/database_manager.py +54 -19
  10. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/company_context_service.py +3 -1
  11. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/context_builder_service.py +18 -5
  12. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/prompt_service.py +61 -1
  13. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/sql_service.py +9 -0
  14. {iatoolkit-2.10.0 → iatoolkit-2.11.0/src/iatoolkit.egg-info}/PKG-INFO +2 -1
  15. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit.egg-info/requires.txt +1 -0
  16. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/LICENSE +0 -0
  17. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/LICENSE_COMMUNITY.md +0 -0
  18. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/pyproject.toml +0 -0
  19. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/readme.md +0 -0
  20. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/setup.cfg +0 -0
  21. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/base_company.py +0 -0
  22. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/cli_commands.py +0 -0
  23. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/common/__init__.py +0 -0
  24. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/common/exceptions.py +0 -0
  25. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/common/interfaces/__init__.py +0 -0
  26. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
  27. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
  28. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
  29. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
  30. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
  31. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
  32. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/common/model_registry.py +0 -0
  33. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/common/routes.py +0 -0
  34. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/common/secret_resolver.py +0 -0
  35. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/common/session_manager.py +0 -0
  36. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/common/util.py +0 -0
  37. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/company_registry.py +0 -0
  38. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/__init__.py +0 -0
  39. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
  40. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
  41. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
  42. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
  43. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
  44. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
  45. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
  46. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
  47. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
  48. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
  49. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
  50. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
  51. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
  52. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
  53. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
  54. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
  55. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
  56. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
  57. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/core.py +0 -0
  58. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/__init__.py +0 -0
  59. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
  60. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/call_service.py +0 -0
  61. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  62. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  63. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  64. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  65. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  66. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  67. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  68. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/google_auth_client.py +0 -0
  69. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/google_chat_app.py +0 -0
  70. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
  71. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/inference_handler.py +0 -0
  72. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
  73. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
  74. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
  75. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
  76. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
  77. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
  78. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
  79. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
  80. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/llm_proxy.py +0 -0
  81. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/llm_response.py +0 -0
  82. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  83. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/locales/en.yaml +0 -0
  84. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/locales/es.yaml +0 -0
  85. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/repositories/__init__.py +0 -0
  86. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/repositories/api_key_repo.py +0 -0
  87. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/repositories/document_repo.py +0 -0
  88. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
  89. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
  90. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
  91. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/repositories/mcp_personal_access_token_repo.py +0 -0
  92. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/repositories/memory_repo.py +0 -0
  93. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/repositories/models.py +0 -0
  94. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/repositories/profile_repo.py +0 -0
  95. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
  96. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
  97. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
  98. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/repositories/vs_repo.py +0 -0
  99. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/__init__.py +0 -0
  100. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/api_key_service.py +0 -0
  101. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/attachment_policy_service.py +0 -0
  102. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/auth_service.py +0 -0
  103. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/benchmark_service.py +0 -0
  104. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/branding_service.py +0 -0
  105. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/configuration_service.py +0 -0
  106. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/dispatcher_service.py +0 -0
  107. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/embedding_service.py +0 -0
  108. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/excel_service.py +0 -0
  109. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/file_processor_service.py +0 -0
  110. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/history_manager_service.py +0 -0
  111. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/http_tool_service.py +0 -0
  112. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/i18n_service.py +0 -0
  113. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/inference_service.py +0 -0
  114. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/jwt_service.py +0 -0
  115. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/knowledge_base_service.py +0 -0
  116. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/language_service.py +0 -0
  117. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/license_service.py +0 -0
  118. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/llm_client_service.py +0 -0
  119. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/mail_service.py +0 -0
  120. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/mcp_personal_access_token_service.py +0 -0
  121. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/memory_compiler_service.py +0 -0
  122. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/memory_lint_service.py +0 -0
  123. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
  124. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/memory_service.py +0 -0
  125. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/memory_wiki_service.py +0 -0
  126. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
  127. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
  128. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/parsers/__init__.py +0 -0
  129. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/parsers/contracts.py +0 -0
  130. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
  131. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
  132. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
  133. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
  134. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
  135. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
  136. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
  137. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
  138. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/parsers/validator.py +0 -0
  139. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/pdf_service.py +0 -0
  140. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/profile_service.py +0 -0
  141. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/prompt_resource_service.py +0 -0
  142. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/query_service.py +0 -0
  143. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
  144. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/sql_dataset_service.py +0 -0
  145. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/sql_source_service.py +0 -0
  146. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/storage_service.py +0 -0
  147. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/structured_output_service.py +0 -0
  148. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
  149. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/system_tools.py +0 -0
  150. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/telemetry_service.py +0 -0
  151. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/tool_service.py +0 -0
  152. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/user_feedback_service.py +0 -0
  153. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/user_session_context_service.py +0 -0
  154. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/visual_kb_service.py +0 -0
  155. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/visual_tool_service.py +0 -0
  156. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/warmup_service.py +0 -0
  157. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/web_search/__init__.py +0 -0
  158. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
  159. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
  160. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
  161. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/services/web_search_service.py +0 -0
  162. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  163. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
  164. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
  165. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  166. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  167. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/js/chat_help_content.js +0 -0
  168. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  169. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  170. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/js/chat_main.js +0 -0
  171. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
  172. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
  173. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  174. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  175. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  176. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  177. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  178. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/styles/chat_public.css +0 -0
  179. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/styles/documents.css +0 -0
  180. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/styles/landing_page.css +0 -0
  181. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/styles/llm_output.css +0 -0
  182. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/static/styles/onboarding.css +0 -0
  183. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/system_prompts/__init__.py +0 -0
  184. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/_company_header.html +0 -0
  185. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/_login_widget.html +0 -0
  186. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/account.html +0 -0
  187. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/base.html +0 -0
  188. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/change_password.html +0 -0
  189. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/chat.html +0 -0
  190. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
  191. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/chat_modals.html +0 -0
  192. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/error.html +0 -0
  193. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/forgot_password.html +0 -0
  194. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/home_hosted_default.html +0 -0
  195. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
  196. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  197. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/pdf/base.html +0 -0
  198. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/pdf/letter.html +0 -0
  199. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/pdf/report.html +0 -0
  200. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/pdf/simple.html +0 -0
  201. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/templates/signup.html +0 -0
  202. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/__init__.py +0 -0
  203. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/account_view.py +0 -0
  204. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/api_key_api_view.py +0 -0
  205. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/base_login_view.py +0 -0
  206. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/categories_api_view.py +0 -0
  207. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/change_password_view.py +0 -0
  208. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
  209. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/chat_view.py +0 -0
  210. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/configuration_api_view.py +0 -0
  211. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/connectors_api_view.py +0 -0
  212. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/embedding_api_view.py +0 -0
  213. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/forgot_password_view.py +0 -0
  214. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/help_content_api_view.py +0 -0
  215. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/history_api_view.py +0 -0
  216. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/home_view.py +0 -0
  217. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/init_context_api_view.py +0 -0
  218. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  219. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/load_document_api_view.py +0 -0
  220. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/login_view.py +0 -0
  221. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/logout_api_view.py +0 -0
  222. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/memory_api_view.py +0 -0
  223. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/profile_api_view.py +0 -0
  224. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/prompt_api_view.py +0 -0
  225. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
  226. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
  227. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/rag_api_view.py +0 -0
  228. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/root_redirect_view.py +0 -0
  229. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/signup_view.py +0 -0
  230. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/static_page_view.py +0 -0
  231. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/tool_api_view.py +0 -0
  232. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  233. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/users_api_view.py +0 -0
  234. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit/views/verify_user_view.py +0 -0
  235. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
  236. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  237. {iatoolkit-2.10.0 → iatoolkit-2.11.0}/src/iatoolkit.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 2.10.0
3
+ Version: 2.11.0
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
@@ -57,6 +57,7 @@ Requires-Dist: pgvector==0.3.6
57
57
  Requires-Dist: pillow==11.0.0
58
58
  Requires-Dist: psutil==7.0.0
59
59
  Requires-Dist: psycopg2-binary==2.9.10
60
+ Requires-Dist: PyMySQL==1.1.1
60
61
  Requires-Dist: PyJWT==2.10.1
61
62
  Requires-Dist: PyMuPDF==1.25.0
62
63
  Requires-Dist: python-dotenv==1.0.1
@@ -47,6 +47,7 @@ pgvector==0.3.6
47
47
  pillow==11.0.0
48
48
  psutil==7.0.0
49
49
  psycopg2-binary==2.9.10
50
+ PyMySQL==1.1.1
50
51
  PyJWT==2.10.1
51
52
  PyMuPDF==1.25.0
52
53
  python-dotenv==1.0.1
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # IAToolkit is open source software.
5
5
 
6
- __version__ = "2.10.0"
6
+ __version__ = "2.11.0"
7
7
 
8
8
  # Expose main classes and functions at the top level of the package
9
9
 
@@ -24,6 +24,14 @@ class DatabaseProvider(abc.ABC):
24
24
  """
25
25
  pass
26
26
 
27
+ @abc.abstractmethod
28
+ def get_dialect(self) -> str:
29
+ """
30
+ Returns the normalized SQL dialect/backend name used by this provider
31
+ (for example: 'postgresql', 'mysql', 'sqlite').
32
+ """
33
+ pass
34
+
27
35
  # --- Execution Methods ---
28
36
  @abc.abstractmethod
29
37
  def execute_query(self, query: str, commit: bool = False) -> Union[List[Dict[str, Any]], Dict[str, int]]:
@@ -40,4 +48,4 @@ class DatabaseProvider(abc.ABC):
40
48
 
41
49
  @abc.abstractmethod
42
50
  def rollback(self) -> None:
43
- pass
51
+ pass
@@ -1,4 +1,4 @@
1
- ### SQL: casting y tipos
1
+ ### SQL PostgreSQL: casting y tipos
2
2
 
3
3
  - Si un numero puede venir con decimales, usa `NUMERIC`, no `INTEGER`.
4
4
  - Para numeros extraidos desde JSONB que pueden venir vacios, usa
@@ -1,9 +1,12 @@
1
1
  ### SQL: reglas base
2
2
 
3
- - Trabaja siempre en PostgreSQL y genera consultas sintacticamente validas.
3
+ - Trabaja siempre con el dialecto SQL indicado para la base seleccionada.
4
+ - Antes de escribir la consulta, revisa el contexto de la base y respeta su marcador
5
+ `dialect=...` (por ejemplo `postgresql` o `mysql`).
4
6
  - Usa solo tablas, columnas y relaciones presentes en el schema provisto.
5
7
  No inventes columnas ni supongas nombres parecidos.
6
8
  - Si la consulta requiere una base especifica, usa `iat_sql_query` con el
7
9
  `database_key` correcto.
8
10
  - Si hay mas de una tabla, subconsulta o CTE, califica las columnas con alias
9
11
  en `SELECT`, `JOIN`, `ON`, `WHERE`, `GROUP BY`, `HAVING` y `ORDER BY`.
12
+ - No mezcles sintaxis de distintos dialectos en la misma consulta.
@@ -1,4 +1,4 @@
1
- ### SQL: columnas JSONB
1
+ ### SQL PostgreSQL: columnas JSONB
2
2
 
3
3
  - Nunca trates una clave JSONB como si fuera una columna fisica.
4
4
  - Usa `jsonb_col->>'campo'` para texto y `jsonb_col->'campo'` para objetos o arrays.
@@ -106,7 +106,7 @@ prompts:
106
106
  - chat
107
107
  - agent
108
108
  all_capabilities:
109
- - can_query_sql
109
+ - can_query_sql_postgres
110
110
  - key: sql_casting
111
111
  filename: sql_casting.prompt
112
112
  section: data_access_rules
@@ -115,7 +115,7 @@ prompts:
115
115
  - chat
116
116
  - agent
117
117
  all_capabilities:
118
- - can_query_sql
118
+ - can_query_sql_postgres
119
119
  - key: sql_aggregation_scope
120
120
  filename: sql_aggregation_scope.prompt
121
121
  section: data_access_rules
@@ -125,3 +125,21 @@ prompts:
125
125
  - agent
126
126
  all_capabilities:
127
127
  - can_query_sql
128
+ - key: sql_mysql_json
129
+ filename: sql_mysql_json.prompt
130
+ section: data_access_rules
131
+ include:
132
+ execution_modes:
133
+ - chat
134
+ - agent
135
+ all_capabilities:
136
+ - can_query_sql_mysql
137
+ - key: sql_mysql_casting
138
+ filename: sql_mysql_casting.prompt
139
+ section: data_access_rules
140
+ include:
141
+ execution_modes:
142
+ - chat
143
+ - agent
144
+ all_capabilities:
145
+ - can_query_sql_mysql
@@ -37,8 +37,9 @@ class DatabaseManager(DatabaseProvider):
37
37
  database_url = database_url.replace("postgres://", "postgresql://", 1)
38
38
 
39
39
  self.url = make_url(database_url)
40
+ self.backend = self.url.get_backend_name()
40
41
 
41
- if database_url.startswith('sqlite'):
42
+ if self.backend == 'sqlite':
42
43
  raw_engine = create_engine(database_url, echo=False)
43
44
  else:
44
45
  raw_engine = create_engine(
@@ -50,16 +51,10 @@ class DatabaseManager(DatabaseProvider):
50
51
  pool_recycle=1800,
51
52
  pool_pre_ping=True,
52
53
  pool_use_lifo=True,
53
- connect_args={
54
- "keepalives": 1,
55
- "keepalives_idle": 30,
56
- "keepalives_interval": 10,
57
- "keepalives_count": 5,
58
- "connect_timeout": 10,
59
- },
54
+ connect_args=self._build_connect_args(),
60
55
  future=True,
61
56
  )
62
- translated_schema = None if self.url.get_backend_name() == 'sqlite' else self.schema
57
+ translated_schema = self.schema if self._is_postgres() else None
63
58
  self._engine = raw_engine.execution_options(
64
59
  schema_translate_map={ORM_SCHEMA: translated_schema}
65
60
  )
@@ -70,8 +65,7 @@ class DatabaseManager(DatabaseProvider):
70
65
  self.scoped_session = scoped_session(self.SessionFactory)
71
66
 
72
67
  # Register pgvector for each new connection
73
- backend = self.url.get_backend_name()
74
- if backend == 'postgresql' or backend == 'postgres':
68
+ if self._is_postgres():
75
69
  if register_pgvector:
76
70
  event.listen(raw_engine, 'connect', self.on_connect)
77
71
 
@@ -79,6 +73,45 @@ class DatabaseManager(DatabaseProvider):
79
73
  if self.schema:
80
74
  event.listen(raw_engine, 'checkout', self.set_search_path)
81
75
 
76
+ def _is_postgres(self) -> bool:
77
+ return self.backend in ('postgresql', 'postgres')
78
+
79
+ def _is_mysql(self) -> bool:
80
+ return self.backend == 'mysql'
81
+
82
+ def _build_connect_args(self) -> dict:
83
+ if self._is_postgres():
84
+ return {
85
+ "keepalives": 1,
86
+ "keepalives_idle": 30,
87
+ "keepalives_interval": 10,
88
+ "keepalives_count": 5,
89
+ "connect_timeout": 10,
90
+ }
91
+ if self._is_mysql():
92
+ return {
93
+ "connect_timeout": 10,
94
+ }
95
+ return {
96
+ "connect_timeout": 10,
97
+ }
98
+
99
+ def _effective_schema(self) -> str | None:
100
+ if self.backend == 'sqlite':
101
+ return None
102
+
103
+ if self._is_postgres():
104
+ return self.schema
105
+
106
+ if self._is_mysql():
107
+ normalized = str(self.schema or "").strip()
108
+ if normalized and normalized.lower() != "public":
109
+ return normalized
110
+ return self.url.database
111
+
112
+ normalized = str(self.schema or "").strip()
113
+ return normalized or None
114
+
82
115
  def set_search_path(self, dbapi_connection, connection_record, connection_proxy):
83
116
  # Configure the search_path for this connection
84
117
  cursor = dbapi_connection.cursor()
@@ -110,10 +143,12 @@ class DatabaseManager(DatabaseProvider):
110
143
  def get_connection(self):
111
144
  return self._engine.connect()
112
145
 
146
+ def get_dialect(self) -> str:
147
+ return str(self.backend or "").strip().lower()
148
+
113
149
  def create_all(self):
114
150
  # if there is a schema defined, make sure it exists before creating tables
115
- backend = self.url.get_backend_name()
116
- if self.schema and (backend == 'postgresql' or backend == 'postgres'):
151
+ if self.schema and self._is_postgres():
117
152
  with self._engine.begin() as conn:
118
153
  conn.execute(text(f"CREATE SCHEMA IF NOT EXISTS {self.schema}"))
119
154
 
@@ -126,8 +161,7 @@ class DatabaseManager(DatabaseProvider):
126
161
  )
127
162
 
128
163
  def _apply_bootstrap_patches(self) -> list[str]:
129
- backend = self.url.get_backend_name()
130
- if backend not in ('postgresql', 'postgres'):
164
+ if not self._is_postgres():
131
165
  return []
132
166
 
133
167
  applied = []
@@ -154,7 +188,7 @@ class DatabaseManager(DatabaseProvider):
154
188
  Implementation for Direct SQLAlchemy connection.
155
189
  """
156
190
  session = self.get_session()
157
- if self.schema:
191
+ if self._is_postgres() and self.schema:
158
192
  session.execute(text(f"SET search_path TO {self.schema}"))
159
193
 
160
194
  result = session.execute(text(query))
@@ -178,14 +212,15 @@ class DatabaseManager(DatabaseProvider):
178
212
  def get_database_structure(self) -> dict:
179
213
  inspector = inspect(self._engine)
180
214
  structure = {}
181
- for table in inspector.get_table_names(schema=self.schema):
215
+ effective_schema = self._effective_schema()
216
+ for table in inspector.get_table_names(schema=effective_schema):
182
217
  columns_data = []
183
218
 
184
219
  # get columns
185
220
  try:
186
- columns = inspector.get_columns(table, schema=self.schema)
221
+ columns = inspector.get_columns(table, schema=effective_schema)
187
222
  # Obtener PKs para marcarlas
188
- pks = inspector.get_pk_constraint(table, schema=self.schema).get('constrained_columns', [])
223
+ pks = inspector.get_pk_constraint(table, schema=effective_schema).get('constrained_columns', [])
189
224
 
190
225
  for col in columns:
191
226
  columns_data.append({
@@ -128,7 +128,9 @@ class CompanyContextService:
128
128
  continue
129
129
 
130
130
  # 2. Build Header for this Database
131
- db_context = f"### Base SQL (`database_key`): {db_name}\n"
131
+ dialect = self.sql_service.get_database_dialect(company_short_name, db_name)
132
+ dialect_suffix = f" [dialect={dialect}]" if dialect else ""
133
+ db_context = f"### Base SQL (`database_key`): {db_name}{dialect_suffix}\n"
132
134
 
133
135
  # Optional: Add DB description from config if available (useful context)
134
136
  db_desc = source.get('description', '')
@@ -73,7 +73,10 @@ class ContextBuilderService:
73
73
  company_id=company.id,
74
74
  company_short_name=company.short_name,
75
75
  query_text=query_text,
76
- capabilities_override=self._resolve_system_prompt_capabilities(available_tools),
76
+ capabilities_override=self.prompt_service.resolve_system_prompt_capabilities(
77
+ company.short_name,
78
+ self._resolve_system_prompt_capabilities(available_tools),
79
+ ),
77
80
  execution_mode="chat",
78
81
  response_mode="chat_compatible",
79
82
  )
@@ -179,7 +182,10 @@ class ContextBuilderService:
179
182
  company_id=company.id,
180
183
  company_short_name=company.short_name,
181
184
  query_text=query_text,
182
- capabilities_override=self._resolve_system_prompt_capabilities(available_tools),
185
+ capabilities_override=self.prompt_service.resolve_system_prompt_capabilities(
186
+ company.short_name,
187
+ self._resolve_system_prompt_capabilities(available_tools),
188
+ ),
183
189
  execution_mode="chat",
184
190
  response_mode="chat_compatible",
185
191
  )
@@ -282,15 +288,22 @@ class ContextBuilderService:
282
288
  PromptResourceType.RAG_COLLECTION.value,
283
289
  )
284
290
 
285
- capabilities_override = self._resolve_system_prompt_capabilities(enabled_tools)
291
+ prompt_capabilities = self._resolve_system_prompt_capabilities(enabled_tools)
286
292
  if self.SQL_TOOL_NAME in enabled_tool_names and not sql_sources:
287
- capabilities_override.discard("can_query_sql")
293
+ prompt_capabilities.discard("can_query_sql")
294
+ prompt_capabilities.discard("can_query_sql_postgres")
295
+ prompt_capabilities.discard("can_query_sql_mysql")
296
+ prompt_capabilities = self.prompt_service.resolve_system_prompt_capabilities(
297
+ company.short_name,
298
+ prompt_capabilities,
299
+ allowed_sql_databases=sql_sources if self.SQL_TOOL_NAME in enabled_tool_names else None,
300
+ )
288
301
 
289
302
  system_prompt_payload = self.prompt_service.get_system_prompt_payload(
290
303
  company_id=company.id,
291
304
  company_short_name=company.short_name,
292
305
  query_text=query_text,
293
- capabilities_override=capabilities_override,
306
+ capabilities_override=prompt_capabilities,
294
307
  execution_mode="agent",
295
308
  response_mode=str(resolved_contract.get("response_mode") or "chat_compatible").strip().lower() or "chat_compatible",
296
309
  )
@@ -633,14 +633,50 @@ class PromptService:
633
633
  self.llm_query_repo.delete_prompt(prompt_db)
634
634
 
635
635
  def _resolve_system_prompt_capabilities(self, company_short_name: str) -> set[str]:
636
+ return self._resolve_sql_prompt_capabilities(company_short_name)
637
+
638
+ def _resolve_sql_prompt_capabilities(
639
+ self,
640
+ company_short_name: str,
641
+ allowed_sql_databases: list[str] | None = None,
642
+ ) -> set[str]:
636
643
  capabilities: set[str] = set()
637
644
  if not company_short_name:
638
645
  return capabilities
639
646
 
640
647
  try:
641
648
  db_names = self.sql_service.get_db_names(company_short_name)
642
- if isinstance(db_names, list) and db_names:
649
+ if not isinstance(db_names, list):
650
+ return capabilities
651
+
652
+ allowed_database_set = None
653
+ if allowed_sql_databases is not None:
654
+ allowed_database_set = {
655
+ str(item or "").strip()
656
+ for item in allowed_sql_databases
657
+ if str(item or "").strip()
658
+ }
659
+ db_names = [db_name for db_name in db_names if db_name in allowed_database_set]
660
+
661
+ if db_names:
643
662
  capabilities.add("can_query_sql")
663
+
664
+ dialects: set[str] = set()
665
+ for db_name in db_names:
666
+ try:
667
+ dialect = self.sql_service.get_database_dialect(company_short_name, db_name)
668
+ except Exception:
669
+ continue
670
+ normalized = str(dialect or "").strip().lower()
671
+ if normalized:
672
+ dialects.add(normalized)
673
+
674
+ if len(dialects) == 1:
675
+ only_dialect = next(iter(dialects))
676
+ if only_dialect in {"postgresql", "postgres"}:
677
+ capabilities.add("can_query_sql_postgres")
678
+ elif only_dialect == "mysql":
679
+ capabilities.add("can_query_sql_mysql")
644
680
  except Exception as e:
645
681
  logging.debug(
646
682
  "Could not resolve SQL capabilities for company '%s': %s",
@@ -650,6 +686,30 @@ class PromptService:
650
686
 
651
687
  return capabilities
652
688
 
689
+ def resolve_system_prompt_capabilities(
690
+ self,
691
+ company_short_name: str,
692
+ base_capabilities: set[str] | list[str] | tuple[str, ...] | None = None,
693
+ allowed_sql_databases: list[str] | None = None,
694
+ ) -> set[str]:
695
+ capabilities = {
696
+ str(item or "").strip()
697
+ for item in (base_capabilities or set())
698
+ if str(item or "").strip()
699
+ }
700
+ sql_capabilities = self._resolve_sql_prompt_capabilities(
701
+ company_short_name,
702
+ allowed_sql_databases=allowed_sql_databases,
703
+ )
704
+
705
+ if "can_query_sql" in capabilities:
706
+ capabilities.update(sql_capabilities)
707
+ else:
708
+ capabilities.discard("can_query_sql_postgres")
709
+ capabilities.discard("can_query_sql_mysql")
710
+
711
+ return capabilities
712
+
653
713
  def get_system_prompt_payload(
654
714
  self,
655
715
  company_id: int,
@@ -102,6 +102,15 @@ class SqlService:
102
102
  """
103
103
  return [db for (co, db) in self._db_connections.keys() if co == company_short_name]
104
104
 
105
+ def get_database_dialect(self, company_short_name: str, db_name: str) -> str:
106
+ provider = self.get_database_provider(company_short_name, db_name)
107
+ dialect = getattr(provider, "get_dialect", None)
108
+ if callable(dialect):
109
+ value = dialect()
110
+ if isinstance(value, str):
111
+ return value.strip().lower()
112
+ return ""
113
+
105
114
  def get_database_provider(self, company_short_name: str, db_name: str) -> DatabaseProvider:
106
115
  """
107
116
  Retrieves a registered DatabaseProvider instance using the composite key.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 2.10.0
3
+ Version: 2.11.0
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
@@ -57,6 +57,7 @@ Requires-Dist: pgvector==0.3.6
57
57
  Requires-Dist: pillow==11.0.0
58
58
  Requires-Dist: psutil==7.0.0
59
59
  Requires-Dist: psycopg2-binary==2.9.10
60
+ Requires-Dist: PyMySQL==1.1.1
60
61
  Requires-Dist: PyJWT==2.10.1
61
62
  Requires-Dist: PyMuPDF==1.25.0
62
63
  Requires-Dist: python-dotenv==1.0.1
@@ -47,6 +47,7 @@ pgvector==0.3.6
47
47
  pillow==11.0.0
48
48
  psutil==7.0.0
49
49
  psycopg2-binary==2.9.10
50
+ PyMySQL==1.1.1
50
51
  PyJWT==2.10.1
51
52
  PyMuPDF==1.25.0
52
53
  python-dotenv==1.0.1
File without changes
File without changes
File without changes
File without changes