iatoolkit 2.45.2__tar.gz → 2.46.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 (252) hide show
  1. {iatoolkit-2.45.2/src/iatoolkit.egg-info → iatoolkit-2.46.0}/PKG-INFO +1 -1
  2. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/__init__.py +1 -1
  3. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/common/util.py +12 -0
  4. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/locales/en.yaml +18 -13
  5. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/locales/es.yaml +30 -13
  6. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/llm_client_service.py +52 -1
  7. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/operator_identity_service.py +18 -8
  8. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/base.html +20 -9
  9. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/home_view.py +4 -1
  10. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/login_view.py +5 -1
  11. {iatoolkit-2.45.2 → iatoolkit-2.46.0/src/iatoolkit.egg-info}/PKG-INFO +1 -1
  12. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/LICENSE +0 -0
  13. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/LICENSE_COMMUNITY.md +0 -0
  14. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/pyproject.toml +0 -0
  15. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/readme.md +0 -0
  16. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/requirements.txt +0 -0
  17. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/setup.cfg +0 -0
  18. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/base_company.py +0 -0
  19. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/cli_commands.py +0 -0
  20. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/common/__init__.py +0 -0
  21. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/common/bridge_validation.py +0 -0
  22. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/common/exceptions.py +0 -0
  23. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/common/interfaces/__init__.py +0 -0
  24. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
  25. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
  26. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
  27. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
  28. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
  29. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
  30. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
  31. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/common/model_registry.py +0 -0
  32. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/common/routes.py +0 -0
  33. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/common/secret_resolver.py +0 -0
  34. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/common/session_manager.py +0 -0
  35. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/company_registry.py +0 -0
  36. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/__init__.py +0 -0
  37. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
  38. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
  39. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
  40. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
  41. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
  42. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
  43. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
  44. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
  45. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
  46. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
  47. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
  48. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
  49. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
  50. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
  51. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
  52. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
  53. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
  54. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
  55. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
  56. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
  57. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
  58. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
  59. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
  60. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
  61. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
  62. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
  63. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
  64. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
  65. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
  66. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/core.py +0 -0
  67. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/__init__.py +0 -0
  68. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
  69. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/call_service.py +0 -0
  70. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  71. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  72. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  73. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  74. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  75. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  76. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  77. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/google_auth_client.py +0 -0
  78. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/google_chat_app.py +0 -0
  79. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
  80. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/inference_handler.py +0 -0
  81. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
  82. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
  83. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
  84. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
  85. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
  86. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
  87. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
  88. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
  89. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
  90. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/llm_proxy.py +0 -0
  91. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/llm_response.py +0 -0
  92. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  93. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/repositories/__init__.py +0 -0
  94. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/repositories/api_key_repo.py +0 -0
  95. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/repositories/bridge_repo.py +0 -0
  96. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/repositories/database_manager.py +0 -0
  97. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/repositories/document_repo.py +0 -0
  98. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
  99. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
  100. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
  101. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
  102. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
  103. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/repositories/memory_repo.py +0 -0
  104. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/repositories/models.py +0 -0
  105. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/repositories/profile_repo.py +0 -0
  106. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
  107. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
  108. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
  109. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/repositories/vs_repo.py +0 -0
  110. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/runtime_logging.py +0 -0
  111. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/__init__.py +0 -0
  112. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/api_key_service.py +0 -0
  113. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/attachment_policy_service.py +0 -0
  114. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/auth_service.py +0 -0
  115. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/benchmark_service.py +0 -0
  116. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/branding_service.py +0 -0
  117. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/company_context_service.py +0 -0
  118. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/configuration_service.py +0 -0
  119. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/context_builder_service.py +0 -0
  120. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/dispatcher_service.py +0 -0
  121. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/embedding_service.py +0 -0
  122. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/excel_service.py +0 -0
  123. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/file_processor_service.py +0 -0
  124. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/history_manager_service.py +0 -0
  125. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/http_tool_service.py +0 -0
  126. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/i18n_service.py +0 -0
  127. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/inference_service.py +0 -0
  128. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/jwt_service.py +0 -0
  129. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/knowledge_base_service.py +0 -0
  130. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/language_service.py +0 -0
  131. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/license_service.py +0 -0
  132. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/mail_service.py +0 -0
  133. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
  134. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/mcp_token_service.py +0 -0
  135. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/memory_compiler_service.py +0 -0
  136. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/memory_lint_service.py +0 -0
  137. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
  138. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/memory_service.py +0 -0
  139. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/memory_wiki_service.py +0 -0
  140. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
  141. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
  142. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/parsers/__init__.py +0 -0
  143. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/parsers/contracts.py +0 -0
  144. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
  145. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
  146. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
  147. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
  148. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
  149. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
  150. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
  151. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
  152. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/parsers/validator.py +0 -0
  153. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/pdf_service.py +0 -0
  154. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/profile_service.py +0 -0
  155. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/prompt_resource_service.py +0 -0
  156. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/prompt_service.py +0 -0
  157. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/query_service.py +0 -0
  158. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
  159. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/sql_dataset_service.py +0 -0
  160. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/sql_service.py +0 -0
  161. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/sql_source_service.py +0 -0
  162. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/storage_service.py +0 -0
  163. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/structured_output_service.py +0 -0
  164. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
  165. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/system_tools.py +0 -0
  166. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/telemetry_service.py +0 -0
  167. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
  168. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/tool_output_contract.py +0 -0
  169. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/tool_service.py +0 -0
  170. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/user_feedback_service.py +0 -0
  171. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/user_session_context_service.py +0 -0
  172. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/visual_kb_service.py +0 -0
  173. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/visual_tool_service.py +0 -0
  174. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/warmup_service.py +0 -0
  175. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/web_search/__init__.py +0 -0
  176. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
  177. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
  178. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
  179. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/services/web_search_service.py +0 -0
  180. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  181. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
  182. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
  183. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  184. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  185. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/js/chat_help_content.js +0 -0
  186. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  187. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  188. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/js/chat_main.js +0 -0
  189. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
  190. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
  191. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  192. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  193. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  194. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  195. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  196. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/styles/chat_public.css +0 -0
  197. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/styles/documents.css +0 -0
  198. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/styles/landing_page.css +0 -0
  199. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/styles/llm_output.css +0 -0
  200. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/static/styles/onboarding.css +0 -0
  201. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/_company_header.html +0 -0
  202. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/_login_widget.html +0 -0
  203. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/account.html +0 -0
  204. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/change_password.html +0 -0
  205. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/chat.html +0 -0
  206. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
  207. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/chat_modals.html +0 -0
  208. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/error.html +0 -0
  209. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/forgot_password.html +0 -0
  210. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/home_hosted_default.html +0 -0
  211. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
  212. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  213. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/pdf/base.html +0 -0
  214. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/pdf/letter.html +0 -0
  215. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/pdf/report.html +0 -0
  216. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/pdf/simple.html +0 -0
  217. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/templates/signup.html +0 -0
  218. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/__init__.py +0 -0
  219. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/account_view.py +0 -0
  220. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/api_key_api_view.py +0 -0
  221. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/base_login_view.py +0 -0
  222. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/categories_api_view.py +0 -0
  223. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/change_password_view.py +0 -0
  224. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
  225. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/chat_view.py +0 -0
  226. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/configuration_api_view.py +0 -0
  227. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/connectors_api_view.py +0 -0
  228. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/embedding_api_view.py +0 -0
  229. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/forgot_password_view.py +0 -0
  230. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/help_content_api_view.py +0 -0
  231. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/history_api_view.py +0 -0
  232. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/init_context_api_view.py +0 -0
  233. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  234. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/load_document_api_view.py +0 -0
  235. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/logout_api_view.py +0 -0
  236. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/memory_api_view.py +0 -0
  237. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/profile_api_view.py +0 -0
  238. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/prompt_api_view.py +0 -0
  239. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
  240. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
  241. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/rag_api_view.py +0 -0
  242. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/root_redirect_view.py +0 -0
  243. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/signup_view.py +0 -0
  244. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/static_page_view.py +0 -0
  245. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/tool_api_view.py +0 -0
  246. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  247. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/users_api_view.py +0 -0
  248. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit/views/verify_user_view.py +0 -0
  249. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
  250. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  251. {iatoolkit-2.45.2 → iatoolkit-2.46.0}/src/iatoolkit.egg-info/requires.txt +0 -0
  252. {iatoolkit-2.45.2 → iatoolkit-2.46.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.45.2
3
+ Version: 2.46.0
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # IAToolkit is open source software.
5
5
 
6
- __version__ = "2.45.2"
6
+ __version__ = "2.46.0"
7
7
 
8
8
  # Expose main classes and functions at the top level of the package
9
9
 
@@ -103,6 +103,18 @@ class Utility:
103
103
  logging.exception(e)
104
104
  return None
105
105
 
106
+ @staticmethod
107
+ def is_hosted_company_record(company) -> bool:
108
+ if not company:
109
+ return False
110
+
111
+ runtime_mode = str(getattr(company, "runtime_mode", "") or "").strip().lower()
112
+ if runtime_mode == "hosted":
113
+ return True
114
+
115
+ service_model = str(getattr(company, "service_model", "") or "").strip().lower()
116
+ return service_model == "hosted"
117
+
106
118
  def is_hosted_company_runtime(self, company_short_name: str) -> bool:
107
119
  try:
108
120
  from iatoolkit.company_registry import get_company_instance
@@ -2064,9 +2064,9 @@ ui:
2064
2064
  mcp:
2065
2065
  menu_label: "MCP"
2066
2066
  title: "MCP"
2067
- subtitle: "Define the tenant MCP catalog, review access, and manage advanced credentials from one workspace."
2067
+ subtitle: "Choose what this tenant publishes through MCP, review access, and manage advanced credentials from one workspace."
2068
2068
  tab_overview: "Overview"
2069
- tab_catalog: "Catalog"
2069
+ tab_catalog: "Publication"
2070
2070
  tab_apps: "Apps"
2071
2071
  tab_resources: "Resources"
2072
2072
  tab_settings: "Settings"
@@ -2082,7 +2082,7 @@ ui:
2082
2082
  legacy_banner_title: "A legacy MCP configuration was found in company.yaml"
2083
2083
  legacy_banner_body: "You can migrate it into the new database-backed MCP configuration and continue managing it from this screen."
2084
2084
  migrate_button: "Migrate from YAML"
2085
- card_tools: "Tools"
2085
+ card_tools: "Capabilities"
2086
2086
  card_agents: "Agents"
2087
2087
  card_data: "Data sources"
2088
2088
  card_apps: "Apps"
@@ -2090,20 +2090,22 @@ ui:
2090
2090
  card_prompts: "Prompts"
2091
2091
  card_warnings: "Warnings"
2092
2092
  items_label: "items"
2093
- surface_label: "MCP surface"
2094
- surface_title: "Published catalog"
2095
- surface_help: "Define the MCP primitives visible to external clients: tools, resources, and prompts."
2096
- tools_help: "Select the MCP tools this tenant publishes to external clients."
2097
- agents_help: "Select Tool for model-invoked use and Prompt for user-loaded MCP templates."
2098
- data_sources_help: "Publish SQL sources and knowledge collections that MCP tools can use."
2093
+ surface_label: "MCP publication"
2094
+ surface_title: "Published capabilities"
2095
+ surface_help: "Choose the capabilities, apps, resources, and prompts external MCP clients can see for this tenant."
2096
+ capabilities_title: "Published capabilities"
2097
+ capabilities_help: "Select what MCP clients can call. Data sources and company context are configured in the sections below."
2098
+ tools_help: "Select built-in MCP capabilities that users or models can call directly."
2099
+ agents_help: "Expose agents as callable tools for model use, as prompts for MCP clients, or both."
2100
+ data_sources_help: "Connect the SQL sources and retrieval collections required by the selected capabilities."
2099
2101
  prompts_help: "MCP prompts are selected from the IAToolkit agents list."
2100
2102
  prompts_empty_title: "No agents available"
2101
2103
  prompts_empty_body: "Create an active agent to publish it as an MCP tool or prompt."
2102
2104
  prompt_arguments_count: "{count} args"
2103
2105
  prompt_arguments_none: "No arguments"
2104
2106
  prompt_required_count: "{count} required"
2105
- expose_as_tool: "Tool"
2106
- expose_as_prompt: "Prompt"
2107
+ expose_as_tool: "As tool"
2108
+ expose_as_prompt: "As prompt"
2107
2109
  agent_role_operations: "Operations"
2108
2110
  agent_role_workspace_chat: "Workspace chat"
2109
2111
  agent_role_workspace_agent: "Workspace agent"
@@ -2121,8 +2123,11 @@ ui:
2121
2123
  enabled_help: "Expose this company's MCP catalog."
2122
2124
  interactive_auth_provider: "Interactive auth provider"
2123
2125
  service_api_key_name: "Legacy API key"
2124
- catalog_tools: "Exposed tools"
2125
- catalog_agents: "IAToolkit agents"
2126
+ catalog_tools: "Base MCP capabilities"
2127
+ catalog_agents: "Published agents"
2128
+ catalog_native_tools: "Company actions"
2129
+ native_tools_help: "Publish active IAToolkit tools that are not already covered by the base MCP capabilities."
2130
+ automatic_tools_note: "Automatic discovery capabilities included:"
2126
2131
  catalog_sql_sources: "Exposed SQL sources"
2127
2132
  catalog_collections: "Exposed RAG collections"
2128
2133
  catalog_resources: "MCP context resources"
@@ -1,5 +1,17 @@
1
1
  # locales/es.yaml
2
2
  emails:
3
+ invoice_issued:
4
+ subject: "Factura {invoice_id} · {company_name}"
5
+ title: "Tu factura del período"
6
+ greeting: "Hola,"
7
+ intro: "Emitimos la factura del período {period_start} al {period_end} para {company_name}."
8
+ total_label: "Total a pagar"
9
+ period_label: "Período"
10
+ due_label: "Pagar antes del"
11
+ invoice_label: "Factura"
12
+ transfer_title: "Datos para transferir"
13
+ reference_note: "Indica el número de factura {invoice_id} en la referencia de la transferencia."
14
+ footer: "Si ya realizaste el pago, ignora este correo."
3
15
  google_welcome:
4
16
  subject: "Bienvenido a IAToolkit"
5
17
  title: "Tu cuenta IAToolkit está lista"
@@ -2070,9 +2082,9 @@ ui:
2070
2082
  mcp:
2071
2083
  menu_label: "MCP"
2072
2084
  title: "MCP"
2073
- subtitle: "Define el catálogo MCP del tenant, revisa accesos y gestiona credenciales avanzadas desde una sola vista."
2085
+ subtitle: "Elige qué publica este tenant por MCP, revisa accesos y gestiona credenciales avanzadas desde una sola vista."
2074
2086
  tab_overview: "Overview"
2075
- tab_catalog: "Catálogo"
2087
+ tab_catalog: "Publicación"
2076
2088
  tab_apps: "Apps"
2077
2089
  tab_resources: "Resources"
2078
2090
  tab_settings: "Configuración"
@@ -2088,7 +2100,7 @@ ui:
2088
2100
  legacy_banner_title: "Se detectó configuración MCP legacy en company.yaml"
2089
2101
  legacy_banner_body: "Puedes migrarla a la nueva configuración persistida en base de datos y seguir administrándola desde esta pantalla."
2090
2102
  migrate_button: "Migrar desde YAML"
2091
- card_tools: "Tools"
2103
+ card_tools: "Capacidades"
2092
2104
  card_agents: "Agentes"
2093
2105
  card_data: "Fuentes de datos"
2094
2106
  card_apps: "Apps"
@@ -2096,20 +2108,22 @@ ui:
2096
2108
  card_prompts: "Prompts"
2097
2109
  card_warnings: "Alertas"
2098
2110
  items_label: "items"
2099
- surface_label: "Superficie MCP"
2100
- surface_title: "Catálogo publicado"
2101
- surface_help: "Define las primitivas MCP visibles para clientes externos: tools, resources y prompts."
2102
- tools_help: "Selecciona las tools MCP que el tenant publicará para clientes externos."
2103
- agents_help: "Marca Tool para permitir invocación automática por el modelo y Prompt para que el usuario lo cargue desde el cliente MCP."
2104
- data_sources_help: "Publica fuentes SQL y colecciones de conocimiento que las tools podrán utilizar."
2111
+ surface_label: "Publicación MCP"
2112
+ surface_title: "Capacidades publicadas"
2113
+ surface_help: "Elige qué capacidades, apps, resources y prompts podrán ver los clientes MCP externos de este tenant."
2114
+ capabilities_title: "Capacidades publicadas"
2115
+ capabilities_help: "Selecciona qué podrán invocar los clientes MCP. Las fuentes de datos y el contexto empresa se configuran en las secciones siguientes."
2116
+ tools_help: "Selecciona capacidades MCP base que usuarios o modelos podrán invocar directamente."
2117
+ agents_help: "Expone agentes como tools invocables por el modelo, como prompts para clientes MCP, o ambos."
2118
+ data_sources_help: "Conecta las fuentes SQL y colecciones de retrieval que necesitan las capacidades seleccionadas."
2105
2119
  prompts_help: "Los prompts MCP se eligen desde la lista de agentes IAToolkit."
2106
2120
  prompts_empty_title: "No hay agentes disponibles"
2107
2121
  prompts_empty_body: "Crea un agente activo para publicarlo como tool o prompt MCP."
2108
2122
  prompt_arguments_count: "{count} args"
2109
2123
  prompt_arguments_none: "Sin argumentos"
2110
2124
  prompt_required_count: "{count} requeridos"
2111
- expose_as_tool: "Tool"
2112
- expose_as_prompt: "Prompt"
2125
+ expose_as_tool: "Como tool"
2126
+ expose_as_prompt: "Como prompt"
2113
2127
  agent_role_operations: "Operaciones"
2114
2128
  agent_role_workspace_chat: "Chat workspace"
2115
2129
  agent_role_workspace_agent: "Agente workspace"
@@ -2127,8 +2141,11 @@ ui:
2127
2141
  enabled_help: "Expone el catálogo MCP de esta empresa."
2128
2142
  interactive_auth_provider: "Proveedor de autenticación interactiva"
2129
2143
  service_api_key_name: "API key legacy"
2130
- catalog_tools: "Tools expuestas"
2131
- catalog_agents: "Agentes IAToolkit"
2144
+ catalog_tools: "Capacidades base MCP"
2145
+ catalog_agents: "Agentes publicados"
2146
+ catalog_native_tools: "Acciones de la empresa"
2147
+ native_tools_help: "Publica tools IAToolkit activas que no están cubiertas por las capacidades base MCP."
2148
+ automatic_tools_note: "Capacidades automáticas de discovery incluidas:"
2132
2149
  catalog_sql_sources: "Fuentes SQL expuestas"
2133
2150
  catalog_collections: "Colecciones RAG expuestas"
2134
2151
  catalog_resources: "Resources de contexto MCP"
@@ -404,7 +404,7 @@ class llmClient:
404
404
  if key == "request_source":
405
405
  continue
406
406
  if value is not None:
407
- combined_stats[key] = value
407
+ combined_stats[key] = self._compact_execution_metadata_for_stats(key, value)
408
408
 
409
409
  # decode the LLM response
410
410
  decoded_response = self.decode_response(response)
@@ -1309,6 +1309,57 @@ class llmClient:
1309
1309
  stats_dict["provider_calls"] = provider_calls
1310
1310
  return stats_dict
1311
1311
 
1312
+ @classmethod
1313
+ def _compact_execution_metadata_for_stats(cls, key: str, value):
1314
+ if key == "tool_router":
1315
+ return cls._compact_tool_router_stats(value)
1316
+ return value
1317
+
1318
+ @staticmethod
1319
+ def _compact_tool_router_stats(metrics):
1320
+ if not isinstance(metrics, dict):
1321
+ return metrics
1322
+
1323
+ compact = {}
1324
+ scalar_keys = (
1325
+ "candidate_count",
1326
+ "selected_count",
1327
+ "selection_mode",
1328
+ "fallback_reason",
1329
+ "selector_latency_ms",
1330
+ "router_skipped",
1331
+ "hard_disable_tools",
1332
+ )
1333
+ for key in scalar_keys:
1334
+ if key in metrics:
1335
+ compact[key] = metrics.get(key)
1336
+
1337
+ list_count_keys = {
1338
+ "configured_tool_names": "configured_count",
1339
+ "matched_tool_names": "matched_count",
1340
+ "missing_tool_names": "missing_count",
1341
+ "forced_tool_names": "forced_count",
1342
+ "selected_system_prompt_keys": "selected_system_prompt_count",
1343
+ }
1344
+ for source_key, target_key in list_count_keys.items():
1345
+ value = metrics.get(source_key)
1346
+ if isinstance(value, list):
1347
+ compact[target_key] = len(value)
1348
+
1349
+ hook_metadata = metrics.get("hook_metadata")
1350
+ if isinstance(hook_metadata, dict):
1351
+ for key in ("top_k", "top_n", "min_confidence", "shadow_mode"):
1352
+ if key in hook_metadata:
1353
+ compact[key] = hook_metadata.get(key)
1354
+ selected_tool_names = hook_metadata.get("selected_tool_names")
1355
+ if isinstance(selected_tool_names, list):
1356
+ compact["hook_selected_count"] = len(selected_tool_names)
1357
+ ranked_tools_preview = hook_metadata.get("ranked_tools_preview")
1358
+ if isinstance(ranked_tools_preview, list):
1359
+ compact["ranked_preview_count"] = len(ranked_tools_preview)
1360
+
1361
+ return compact
1362
+
1312
1363
 
1313
1364
  def _create_sql_retry_prompt(self, function_name: str, sql_query: str, db_error: str) -> str:
1314
1365
  return f"""
@@ -39,6 +39,17 @@ class OperatorIdentityService:
39
39
  SETTING_NAMES = ("IAT_OPERATOR_COMPANY", "IAT_BILLING_COMPANY_SHORT_NAME")
40
40
  SETTING_NAME = SETTING_NAMES[0]
41
41
 
42
+ #: Held on the class, not the instance. Callers that have a repository at hand
43
+ #: build their own instance rather than asking the injector, so an instance
44
+ #: cache resolved — and logged, and queried the database — once per request
45
+ #: instead of once per process.
46
+ _resolved: str | None = None
47
+
48
+ @classmethod
49
+ def reset_cache(cls) -> None:
50
+ """Forget the resolved name. For tests: it cannot change at runtime."""
51
+ OperatorIdentityService._resolved = None
52
+
42
53
  @classmethod
43
54
  def stated_name(cls) -> str:
44
55
  """What this deployment calls its operator, without checking it exists.
@@ -57,7 +68,6 @@ class OperatorIdentityService:
57
68
  @inject
58
69
  def __init__(self, profile_repo: ProfileRepo):
59
70
  self.profile_repo = profile_repo
60
- self._resolved: str | None = None
61
71
 
62
72
  def company_short_name(self) -> str:
63
73
  """The operator company, resolved once per process.
@@ -65,24 +75,24 @@ class OperatorIdentityService:
65
75
  Cached because the answer cannot change without a deployment, and this is
66
76
  read on paths that run per request and per invoice.
67
77
  """
68
- if self._resolved:
69
- return self._resolved
78
+ if OperatorIdentityService._resolved:
79
+ return OperatorIdentityService._resolved
70
80
 
71
81
  for setting in self.SETTING_NAMES:
72
82
  configured = (os.getenv(setting) or "").strip().lower()
73
83
  if configured:
74
- self._resolved = configured
84
+ OperatorIdentityService._resolved = configured
75
85
  logging.info("Operator company: '%s' (from %s).", configured, setting)
76
- return self._resolved
86
+ return configured
77
87
 
78
88
  if self._company_exists(self.LEGACY_COMPANY_SHORT_NAME):
79
- self._resolved = self.LEGACY_COMPANY_SHORT_NAME
89
+ OperatorIdentityService._resolved = self.LEGACY_COMPANY_SHORT_NAME
80
90
  logging.info(
81
91
  "Operator company: '%s' (default). Set %s to name it explicitly.",
82
- self._resolved,
92
+ OperatorIdentityService._resolved,
83
93
  self.SETTING_NAME,
84
94
  )
85
- return self._resolved
95
+ return OperatorIdentityService._resolved
86
96
 
87
97
  # Deliberately loud. The alternative is what used to happen: a name from
88
98
  # another deployment travels down to the payment configuration and the
@@ -57,17 +57,28 @@
57
57
  "target": "#page-content-wrapper"
58
58
  };
59
59
 
60
- {% if flashed_messages %}
60
+ {# Una plantilla puede dibujar sus propios avisos y apagar este camino:
61
+ la consola de hosting lo hace, porque un mensaje que obliga a actuar no
62
+ puede irse solo a los siete segundos. #}
63
+ {% if flashed_messages and not suppress_toasts %}
61
64
  {% for category, message in flashed_messages %}
62
- var toastClass = 'toast-info'; // default class
63
- if ('{{ category }}' === 'error') {
64
- toastClass = 'toast-error';
65
- } else if ('{{ category }}' === 'success') {
66
- toastClass = 'toast-success';
65
+ // El método, no solo la clase: `toastr.info` agrega `toast-info`
66
+ // al final y le ganaba a la clase que veníamos calculando, así
67
+ // que un error se veía igual que un aviso cualquiera.
68
+ var category = '{{ category }}';
69
+ var show = toastr.info;
70
+ if (category === 'error') {
71
+ show = toastr.error;
72
+ } else if (category === 'success') {
73
+ show = toastr.success;
74
+ } else if (category === 'warning') {
75
+ show = toastr.warning;
67
76
  }
68
-
69
- // Llama a Toastr usando la opción 'toastClass' para aplicar nuestro estilo
70
- toastr.info("{{ message }}", null, { "toastClass": "toast " + toastClass });
77
+ show("{{ message }}", null, { "toastClass": "toast toast-" + (
78
+ category === 'error' ? 'error' :
79
+ category === 'success' ? 'success' :
80
+ category === 'warning' ? 'warning' : 'info'
81
+ ) });
71
82
 
72
83
  {% endfor %}
73
84
  {% endif %}
@@ -43,7 +43,10 @@ class HomeView(MethodView):
43
43
  # 2. Verificamos si el archivo de plantilla personalizado no existe.
44
44
  if not home_template:
45
45
  # Hosted tenants do not require filesystem home templates.
46
- if self.util.is_hosted_company_runtime(company_short_name):
46
+ if (
47
+ Utility.is_hosted_company_record(company)
48
+ or self.util.is_hosted_company_runtime(company_short_name)
49
+ ):
47
50
  return render_template(
48
51
  "home_hosted_default.html",
49
52
  company_short_name=company_short_name,
@@ -17,6 +17,7 @@ from iatoolkit.services.branding_service import BrandingService
17
17
  from iatoolkit.services.configuration_service import ConfigurationService
18
18
  from iatoolkit.services.i18n_service import I18nService
19
19
  from iatoolkit.views.base_login_view import BaseLoginView
20
+ from iatoolkit.common.util import Utility
20
21
  import logging
21
22
  import secrets
22
23
  from urllib.parse import urljoin, urlparse
@@ -73,7 +74,10 @@ class LoginView(BaseLoginView):
73
74
  home_template = self.utility.get_company_template(company_short_name, template_name)
74
75
 
75
76
  if not home_template:
76
- if self.utility.is_hosted_company_runtime(company_short_name):
77
+ if (
78
+ Utility.is_hosted_company_record(company)
79
+ or self.utility.is_hosted_company_runtime(company_short_name)
80
+ ):
77
81
  return render_template(
78
82
  "home_hosted_default.html",
79
83
  company_short_name=company_short_name,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 2.45.2
3
+ Version: 2.46.0
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
File without changes
File without changes
File without changes
File without changes
File without changes