iatoolkit 2.0.2__tar.gz → 2.2.1__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 (210) hide show
  1. {iatoolkit-2.0.2/src/iatoolkit.egg-info → iatoolkit-2.2.1}/PKG-INFO +1 -1
  2. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/__init__.py +1 -1
  3. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/config/system_tools_pack.yaml +0 -2
  4. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +3 -1
  5. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +2 -0
  6. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/llm_providers/openai_adapter.py +4 -1
  7. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +2 -0
  8. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/locales/en.yaml +146 -0
  9. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/locales/es.yaml +146 -0
  10. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/repositories/llm_query_repo.py +3 -0
  11. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/repositories/models.py +1 -0
  12. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/repositories/vs_repo.py +8 -4
  13. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/configuration_service.py +62 -1
  14. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/context_builder_service.py +3 -0
  15. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/llm_client_service.py +8 -1
  16. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/prompt_service.py +98 -1
  17. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/query_service.py +177 -12
  18. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/tool_service.py +41 -0
  19. {iatoolkit-2.0.2 → iatoolkit-2.2.1/src/iatoolkit.egg-info}/PKG-INFO +1 -1
  20. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/LICENSE +0 -0
  21. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/LICENSE_COMMUNITY.md +0 -0
  22. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/pyproject.toml +0 -0
  23. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/readme.md +0 -0
  24. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/requirements.txt +0 -0
  25. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/setup.cfg +0 -0
  26. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/base_company.py +0 -0
  27. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/cli_commands.py +0 -0
  28. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/common/__init__.py +0 -0
  29. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/common/exceptions.py +0 -0
  30. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/common/interfaces/__init__.py +0 -0
  31. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
  32. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
  33. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
  34. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
  35. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
  36. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
  37. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
  38. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/common/model_registry.py +0 -0
  39. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/common/routes.py +0 -0
  40. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/common/secret_resolver.py +0 -0
  41. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/common/session_manager.py +0 -0
  42. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/common/util.py +0 -0
  43. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/company_registry.py +0 -0
  44. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/config/__init__.py +0 -0
  45. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
  46. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
  47. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/core.py +0 -0
  48. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/__init__.py +0 -0
  49. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
  50. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/call_service.py +0 -0
  51. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  52. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  53. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  54. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  55. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  56. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  57. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  58. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/google_auth_client.py +0 -0
  59. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/google_chat_app.py +0 -0
  60. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
  61. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/inference_handler.py +0 -0
  62. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
  63. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
  64. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
  65. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/llm_proxy.py +0 -0
  66. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/llm_response.py +0 -0
  67. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  68. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/repositories/__init__.py +0 -0
  69. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/repositories/api_key_repo.py +0 -0
  70. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/repositories/database_manager.py +0 -0
  71. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/repositories/document_repo.py +0 -0
  72. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
  73. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
  74. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/repositories/memory_repo.py +0 -0
  75. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/repositories/profile_repo.py +0 -0
  76. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
  77. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
  78. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/__init__.py +0 -0
  79. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/api_key_service.py +0 -0
  80. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/attachment_policy_service.py +0 -0
  81. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/auth_service.py +0 -0
  82. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/benchmark_service.py +0 -0
  83. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/branding_service.py +0 -0
  84. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/company_context_service.py +0 -0
  85. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/dispatcher_service.py +0 -0
  86. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/embedding_service.py +0 -0
  87. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/excel_service.py +0 -0
  88. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/file_processor_service.py +0 -0
  89. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/history_manager_service.py +0 -0
  90. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/http_tool_service.py +0 -0
  91. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/i18n_service.py +0 -0
  92. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/inference_service.py +0 -0
  93. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/jwt_service.py +0 -0
  94. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/knowledge_base_service.py +0 -0
  95. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/language_service.py +0 -0
  96. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/license_service.py +0 -0
  97. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/mail_service.py +0 -0
  98. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/memory_compiler_service.py +0 -0
  99. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/memory_lint_service.py +0 -0
  100. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
  101. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/memory_service.py +0 -0
  102. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/memory_wiki_service.py +0 -0
  103. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
  104. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
  105. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/parsers/__init__.py +0 -0
  106. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/parsers/contracts.py +0 -0
  107. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
  108. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
  109. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
  110. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
  111. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
  112. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
  113. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
  114. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
  115. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/parsers/validator.py +0 -0
  116. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/pdf_service.py +0 -0
  117. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/profile_service.py +0 -0
  118. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
  119. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/sql_dataset_service.py +0 -0
  120. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/sql_service.py +0 -0
  121. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/sql_source_service.py +0 -0
  122. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/storage_service.py +0 -0
  123. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/structured_output_service.py +0 -0
  124. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
  125. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/system_tools.py +0 -0
  126. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/user_feedback_service.py +0 -0
  127. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/user_session_context_service.py +0 -0
  128. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/visual_kb_service.py +0 -0
  129. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/visual_tool_service.py +0 -0
  130. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/warmup_service.py +0 -0
  131. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/web_search/__init__.py +0 -0
  132. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
  133. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
  134. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
  135. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/services/web_search_service.py +0 -0
  136. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  137. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
  138. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
  139. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  140. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  141. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/js/chat_help_content.js +0 -0
  142. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  143. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  144. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/js/chat_main.js +0 -0
  145. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
  146. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
  147. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  148. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  149. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  150. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  151. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  152. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/styles/chat_public.css +0 -0
  153. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/styles/documents.css +0 -0
  154. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/styles/landing_page.css +0 -0
  155. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/styles/llm_output.css +0 -0
  156. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/static/styles/onboarding.css +0 -0
  157. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/system_prompts/__init__.py +0 -0
  158. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/system_prompts/format_styles.prompt +0 -0
  159. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/system_prompts/query_main.prompt +0 -0
  160. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/system_prompts/sql_rules.prompt +0 -0
  161. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/templates/_company_header.html +0 -0
  162. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/templates/_login_widget.html +0 -0
  163. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/templates/base.html +0 -0
  164. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/templates/change_password.html +0 -0
  165. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/templates/chat.html +0 -0
  166. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
  167. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/templates/chat_modals.html +0 -0
  168. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/templates/error.html +0 -0
  169. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/templates/forgot_password.html +0 -0
  170. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/templates/home_hosted_default.html +0 -0
  171. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
  172. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  173. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/templates/pdf/base.html +0 -0
  174. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/templates/pdf/letter.html +0 -0
  175. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/templates/pdf/report.html +0 -0
  176. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/templates/pdf/simple.html +0 -0
  177. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/templates/signup.html +0 -0
  178. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/__init__.py +0 -0
  179. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/api_key_api_view.py +0 -0
  180. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/base_login_view.py +0 -0
  181. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/categories_api_view.py +0 -0
  182. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/change_password_view.py +0 -0
  183. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/chat_view.py +0 -0
  184. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/configuration_api_view.py +0 -0
  185. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/connectors_api_view.py +0 -0
  186. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/embedding_api_view.py +0 -0
  187. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/forgot_password_view.py +0 -0
  188. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/help_content_api_view.py +0 -0
  189. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/history_api_view.py +0 -0
  190. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/home_view.py +0 -0
  191. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/init_context_api_view.py +0 -0
  192. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  193. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/load_document_api_view.py +0 -0
  194. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/login_view.py +0 -0
  195. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/logout_api_view.py +0 -0
  196. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/memory_api_view.py +0 -0
  197. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/profile_api_view.py +0 -0
  198. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/prompt_api_view.py +0 -0
  199. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/rag_api_view.py +0 -0
  200. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/root_redirect_view.py +0 -0
  201. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/signup_view.py +0 -0
  202. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/static_page_view.py +0 -0
  203. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/tool_api_view.py +0 -0
  204. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  205. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/users_api_view.py +0 -0
  206. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit/views/verify_user_view.py +0 -0
  207. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
  208. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  209. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/src/iatoolkit.egg-info/requires.txt +0 -0
  210. {iatoolkit-2.0.2 → iatoolkit-2.2.1}/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.0.2
3
+ Version: 2.2.1
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.0.2"
6
+ __version__ = "2.2.1"
7
7
 
8
8
  # Expose main classes and functions at the top level of the package
9
9
 
@@ -264,8 +264,6 @@ tools:
264
264
  description: "Opcional en la práctica. Usa null cuando no necesites filtrar por metadata. No inventes filtros ni envíes [] por defecto. Ejemplo: [{'key':'doc.type','value':'invoice'},{'key':'chunk.source_type','value':'table'}]."
265
265
  required:
266
266
  - query
267
- - collection
268
- - metadata_filter
269
267
  - function_name: iat_memory_search
270
268
  description: Busca páginas relevantes dentro de la Memoria personal del usuario y retorna contexto compilado. Incluye la señal `has_native_files` cuando una memoria tiene archivos fuente que pueden adjuntarse nativamente al modelo. Debe usarse antes de responder preguntas sobre cosas guardadas, notas previas, memoria del usuario, continuidad entre sesiones o "lo que hablamos/guardé antes".
271
269
  routing:
@@ -32,7 +32,8 @@ class AnthropicAdapter:
32
32
  tool_choice: str = "auto",
33
33
  images: Optional[List[Dict]] = None,
34
34
  attachments: Optional[List[Dict]] = None,
35
- store: Optional[bool] = None) -> LLMResponse:
35
+ store: Optional[bool] = None,
36
+ metadata: Optional[Dict[str, str]] = None) -> LLMResponse:
36
37
  """
37
38
  Calls Anthropic Messages API and maps the response to common LLMResponse.
38
39
 
@@ -44,6 +45,7 @@ class AnthropicAdapter:
44
45
  _ = reasoning
45
46
  _ = attachments
46
47
  _ = store
48
+ _ = metadata
47
49
 
48
50
  try:
49
51
  full_input = (context_history or []) + input
@@ -52,9 +52,11 @@ class GeminiAdapter:
52
52
  images: Optional[List[Dict]] = None,
53
53
  attachments: Optional[List[Dict]] = None,
54
54
  store: Optional[bool] = None,
55
+ metadata: Optional[Dict[str, str]] = None,
55
56
  ) -> LLMResponse:
56
57
  try:
57
58
  _ = store
59
+ _ = metadata
58
60
 
59
61
  # Separamos las instrucciones del sistema del resto del contenido
60
62
  system_instruction, filtered_input = self._extract_system_and_filter_input(
@@ -30,7 +30,8 @@ class OpenAIAdapter:
30
30
  tool_choice: str = "auto",
31
31
  images: Optional[List[Dict]] = None,
32
32
  attachments: Optional[List[Dict]] = None,
33
- store: Optional[bool] = None) -> LLMResponse:
33
+ store: Optional[bool] = None,
34
+ metadata: Optional[Dict[str, str]] = None) -> LLMResponse:
34
35
  """Llamada a la API de OpenAI y mapeo a estructura común"""
35
36
  try:
36
37
  # Handle multimodal input if images are present
@@ -57,6 +58,8 @@ class OpenAIAdapter:
57
58
  params['reasoning'] = reasoning
58
59
  if store is not None:
59
60
  params['store'] = store
61
+ if metadata:
62
+ params['metadata'] = metadata
60
63
  tool_choice_payload = self._map_tool_choice(tool_choice, tools or [])
61
64
  if tool_choice_payload is not None:
62
65
  params['tool_choice'] = tool_choice_payload
@@ -60,6 +60,8 @@ class OpenAICompatibleChatAdapter:
60
60
  )
61
61
 
62
62
  tools_payload = self._build_tools_payload(tools)
63
+ if not tools_payload:
64
+ tool_choice = None
63
65
 
64
66
  if has_function_outputs and tool_choice == "auto":
65
67
  logging.debug(
@@ -32,6 +32,8 @@ ui:
32
32
  latency_p95: "Latency (Avg)"
33
33
  error_rate: "Error Rate (1h)"
34
34
  queue: "Pending Tasks"
35
+ running: "Running"
36
+ waiting: "Waiting"
35
37
  tab_chats: "Live Chats"
36
38
  tab_agents: "Agents"
37
39
  tab_logs: "Access Logs"
@@ -43,6 +45,13 @@ ui:
43
45
  tool_router_top_n: "Top N"
44
46
  tool_router_min_confidence: "Min confidence"
45
47
  tool_router_rebuild_profiles: "Rebuild Profiles"
48
+ task_reconciliation_eyebrow: "Task Reconciliation"
49
+ task_reconciliation_title: "Automatic recovery signals (24h)"
50
+ task_reconciliation_note: "Derived from worker reconciliation"
51
+ task_reconciliation_total: "Reconciled"
52
+ task_reconciliation_requeued: "Requeued"
53
+ task_reconciliation_normalized: "Normalized"
54
+ task_reconciliation_failed: "Recovered As Failed"
46
55
 
47
56
  inspector:
48
57
  title: "Interaction Inspector"
@@ -201,6 +210,107 @@ ui:
201
210
  unsaved_changes_message: "You have unsaved changes. Do you want to save them before proceeding?"
202
211
  discard_changes: "Discard Changes"
203
212
  description: "Description"
213
+ skills: "Skills"
214
+
215
+ skills:
216
+ title: "Skills"
217
+ search_placeholder: "Search skills"
218
+ search_tools_placeholder: "Search tools"
219
+ search_prompts_placeholder: "Search prompts and agents"
220
+ status_filter_all: "All statuses"
221
+ status_active: "Active"
222
+ status_draft: "Draft"
223
+ status_archived: "Archived"
224
+ select_skill: "Select a skill"
225
+ archive: "Archive"
226
+ tab_editor: "Editor"
227
+ tab_resources: "Resources"
228
+ tab_prompt_bindings: "Prompts & Agents"
229
+ tab_versions: "Versions"
230
+ name_label: "Name"
231
+ name_placeholder: "Research Briefing"
232
+ key_label: "Key"
233
+ key_help: "Stable identifier used by prompts, agents, and bundles."
234
+ status_label: "Status"
235
+ activation_label: "Activation"
236
+ activation_explicit: "Explicit"
237
+ owner_label: "Owner"
238
+ description_placeholder: "What this skill is for and when to use it."
239
+ tags_label: "Tags"
240
+ tags_placeholder: "research, compliance, onboarding"
241
+ tags_help: "Comma-separated tags."
242
+ tool_policy_title: "Tool Policy"
243
+ tool_policy_help: "Skills can contribute an explicit tool subset to prompts and agents."
244
+ mode_label: "Mode"
245
+ mode_inherit: "Inherit"
246
+ mode_explicit: "Explicit"
247
+ body_label: "Body"
248
+ body_placeholder: "Reusable instructions, constraints, examples, and conventions shared across agents."
249
+ resource_bindings_title: "Resource Bindings"
250
+ resource_bindings_help: "Attach config, static text, SQL, RAG, and tools as referenced resources for this skill."
251
+ resource_bindings_empty: "No resource bindings yet."
252
+ add_resource: "Add resource"
253
+ prompt_bindings_title: "Prompt & Agent Bindings"
254
+ prompt_bindings_help: "Choose which prompts and agent prompts will consume this skill at runtime."
255
+ prompt_library_help: "Attach reusable skills that enrich prompt runtime with shared behavior, tools, and context."
256
+ prompt_bindings_summary: "{count} prompts/agents use this skill."
257
+ prompt_bindings_runtime_help: "Only active skills are resolved at runtime. Draft or archived bindings stay visible here for maintenance."
258
+ prompt_bindings_missing: "Missing skills: {names}"
259
+ version_history_title: "Version History"
260
+ select_skill_versions: "Select a skill to load versions."
261
+ snapshot_detail_title: "Snapshot Detail"
262
+ summary_label: "Summary"
263
+ raw_snapshot_label: "Raw Snapshot"
264
+ restore_selected_version: "Restore selected version"
265
+ workspace_placeholder: "Skills package reusable behavior, tools, and resources for prompts and agents."
266
+ new_skill_title: "New Skill"
267
+ new_skill_description_placeholder: "Reusable guidance for research-oriented prompts and agents."
268
+ create_skill: "Create skill"
269
+ open_library: "Open Skills Library"
270
+ loading: "Loading skills..."
271
+ empty: "No skills found."
272
+ load_failed: "Failed to load skills."
273
+ prompt_bindings_load_failed: "Failed to load prompt skills."
274
+ prompts_save_failed: "Failed to save prompt bindings."
275
+ discard_confirm: "You have unsaved changes. Discard them?"
276
+ name_required: "Name and key are required."
277
+ create_failed: "Failed to create skill."
278
+ create_ok: "Skill created."
279
+ usage_summary: "{prompts} prompts/agents · {resources} resources"
280
+ tools_loading: "Loading tools..."
281
+ no_tools: "No tools available."
282
+ tools_summary_inherit: "This skill inherits tool selection from the prompt."
283
+ tools_summary_explicit: "{count} explicit tools selected."
284
+ no_prompts: "No prompts available."
285
+ no_versions: "No saved versions yet."
286
+ unknown_user: "Unknown user"
287
+ invalid_payload: "Invalid skill payload."
288
+ save_failed: "Failed to save skill."
289
+ resources_save_failed: "Failed to save resource bindings."
290
+ save_ok: "Skill saved successfully."
291
+ archive_confirm: "Archive this skill?"
292
+ archive_failed: "Failed to archive skill."
293
+ archive_ok: "Skill archived."
294
+ restore_confirm: "Restore this version? Current edits will be replaced."
295
+ restore_failed: "Failed to restore skill version."
296
+ restore_ok: "Skill version restored."
297
+ readonly_message: "Skill editing requires admin or owner role."
298
+ uncategorized: "Uncategorized"
299
+ binding_label: "Binding {number}"
300
+ resource_type_label: "Resource type"
301
+ resource_key_label: "Resource key"
302
+ resource_key_placeholder: "routing.yaml or collection name"
303
+ metadata_json_label: "Metadata JSON"
304
+ prompt_type_agent: "Agent"
305
+ prompt_type_prompt: "Prompt"
306
+ resource_type_tool: "Tool"
307
+ resource_type_rag_collection: "RAG collection"
308
+ resource_type_sql_source: "SQL source"
309
+ resource_type_sql_dataset: "SQL dataset"
310
+ resource_type_config: "Config"
311
+ resource_type_static_text: "Static text"
312
+ version_detail_meta: "v{version} · {created_at} · {created_by}"
313
+ saving: "Saving..."
204
314
 
205
315
  ops_mobile:
206
316
  title: "Ops Mobile"
@@ -343,6 +453,15 @@ ui:
343
453
  error_deleting_profile: "Error deleting processing profile"
344
454
  profile_deleted: "Processing profile deleted."
345
455
  refresh_runs: "Refresh Runs"
456
+ filter_status_all: "All statuses"
457
+ filter_status_active: "Active"
458
+ filter_status_attention: "Needs attention"
459
+ time_filter: "Time"
460
+ filter_time_3h: "Last 3 hours"
461
+ filter_time_24h: "Last 24 hours"
462
+ filter_time_7d: "Last 7 days"
463
+ filter_time_all: "All time"
464
+ default_view: "Default view"
346
465
  run_id: "Run"
347
466
  run_profile: "Profile"
348
467
  run_status: "Status"
@@ -362,8 +481,10 @@ ui:
362
481
  run_completed_short: "C"
363
482
  run_failed_short: "F"
364
483
  no_runs: "No pipeline runs yet."
484
+ no_runs_match_filters: "No pipeline runs match the current filters."
365
485
  error_loading_runs: "Error loading pipeline runs"
366
486
  error_loading_run_detail: "Error loading pipeline run details"
487
+ showing_runs: "Showing"
367
488
  view_run: "View run"
368
489
  view_result: "View result"
369
490
  run_detail_title: "Pipeline Run"
@@ -392,11 +513,15 @@ ui:
392
513
  artifact_rows: "Rows"
393
514
  download_artifact: "Download"
394
515
  progress_label: "Progress"
516
+ progress_pending_discovery: "Global progress will appear after discovery completes."
517
+ progress_pending_discovery_short: "Pending discovery"
395
518
  auto_refresh_on: "Live refresh on"
396
519
  auto_refresh_paused: "Live refresh paused"
397
520
  task_progress: "Task progress"
398
521
  files_counter: "Files"
399
522
  items_counter: "Items"
523
+ submitted_label: "submitted"
524
+ run_phase: "Run phase"
400
525
  task_stage_pending: "Pending"
401
526
  task_stage_started: "Started"
402
527
  task_stage_preprocessing_attachments: "Pre-processing attachments"
@@ -830,6 +955,7 @@ ui:
830
955
  save_btn: "Save"
831
956
  tab_editor: "Editor"
832
957
  tab_output: "Output"
958
+ tab_tools: "Tools"
833
959
  tab_playground: "Playground"
834
960
  config_title: "Config"
835
961
  desc_label: "Description"
@@ -882,6 +1008,26 @@ ui:
882
1008
  store_response_default: "Provider default"
883
1009
  store_response_true: "Yes"
884
1010
  store_response_false: "No"
1011
+ tools_title: "Tool Selection"
1012
+ tools_mode_label: "Tools Mode"
1013
+ tools_mode_inherit: "Automatic"
1014
+ tools_mode_explicit: "Explicit"
1015
+ tools_mode_help: "In explicit mode, the prompt sends only the selected tools and skips the router."
1016
+ tools_search_placeholder: "Search tools..."
1017
+ tools_summary_inherit: "This prompt uses automatic tool selection."
1018
+ tools_summary_explicit: "This prompt will send {count} selected tools."
1019
+ tools_empty_state: "No tools available to select."
1020
+ tools_loading: "Loading tools..."
1021
+ tools_load_failed: "Tools could not be loaded."
1022
+ tools_selection_required: "Select at least one tool when using explicit mode."
1023
+ tools_missing_warning: "These tools no longer exist for the company: {names}"
1024
+ tools_inactive_warning: "These tools are inactive and will not be sent: {names}"
1025
+ tools_source_system: "SYSTEM"
1026
+ tools_source_pack: "PACK"
1027
+ tools_source_user: "USER"
1028
+ tools_type_http: "HTTP"
1029
+ tools_type_native: "NATIVE"
1030
+ tools_type_system: "SYSTEM"
885
1031
  run_btn: "Run"
886
1032
  copy_html_btn: "Copy HTML"
887
1033
  copy_json_btn: "Copy JSON"
@@ -33,6 +33,8 @@ ui:
33
33
  latency_p95: "Latencia (Prom)"
34
34
  error_rate: "Tasa Error (1h)"
35
35
  queue: "Tareas Pendientes"
36
+ running: "En ejecución"
37
+ waiting: "Esperando"
36
38
  tab_chats: "Chats en Vivo"
37
39
  tab_agents: "Agentes"
38
40
  tab_logs: "Logs de Acceso"
@@ -44,6 +46,13 @@ ui:
44
46
  tool_router_top_n: "Top N"
45
47
  tool_router_min_confidence: "Confianza mínima"
46
48
  tool_router_rebuild_profiles: "Reconstruir perfiles"
49
+ task_reconciliation_eyebrow: "Conciliación de Tareas"
50
+ task_reconciliation_title: "Señales automáticas de recuperación (24h)"
51
+ task_reconciliation_note: "Derivado de la conciliación del worker"
52
+ task_reconciliation_total: "Conciliadas"
53
+ task_reconciliation_requeued: "Reencoladas"
54
+ task_reconciliation_normalized: "Normalizadas"
55
+ task_reconciliation_failed: "Recuperadas como fallidas"
47
56
 
48
57
  inspector:
49
58
  title: "Inspector de Interacción"
@@ -201,6 +210,107 @@ ui:
201
210
  discard_changes: "Descartar cambios"
202
211
  loading: "Cargando..."
203
212
  description: "Descripción"
213
+ skills: "Skills"
214
+
215
+ skills:
216
+ title: "Skills"
217
+ search_placeholder: "Buscar skills"
218
+ search_tools_placeholder: "Buscar tools"
219
+ search_prompts_placeholder: "Buscar prompts y agentes"
220
+ status_filter_all: "Todos los estados"
221
+ status_active: "Activo"
222
+ status_draft: "Borrador"
223
+ status_archived: "Archivado"
224
+ select_skill: "Selecciona una skill"
225
+ archive: "Archivar"
226
+ tab_editor: "Editor"
227
+ tab_resources: "Recursos"
228
+ tab_prompt_bindings: "Prompts y Agentes"
229
+ tab_versions: "Versiones"
230
+ name_label: "Nombre"
231
+ name_placeholder: "Research Briefing"
232
+ key_label: "Key"
233
+ key_help: "Identificador estable usado por prompts, agentes y bundles."
234
+ status_label: "Estado"
235
+ activation_label: "Activación"
236
+ activation_explicit: "Explícita"
237
+ owner_label: "Owner"
238
+ description_placeholder: "Para qué sirve esta skill y cuándo conviene usarla."
239
+ tags_label: "Tags"
240
+ tags_placeholder: "research, compliance, onboarding"
241
+ tags_help: "Tags separadas por coma."
242
+ tool_policy_title: "Política de Tools"
243
+ tool_policy_help: "Las skills pueden aportar un subconjunto explícito de tools a prompts y agentes."
244
+ mode_label: "Modo"
245
+ mode_inherit: "Heredar"
246
+ mode_explicit: "Explícito"
247
+ body_label: "Body"
248
+ body_placeholder: "Instrucciones reutilizables, restricciones, ejemplos y convenciones compartidas entre agentes."
249
+ resource_bindings_title: "Bindings de Recursos"
250
+ resource_bindings_help: "Asocia config, static text, SQL, RAG y tools como recursos referenciados por esta skill."
251
+ resource_bindings_empty: "Todavía no hay bindings de recursos."
252
+ add_resource: "Agregar recurso"
253
+ prompt_bindings_title: "Bindings de Prompts y Agentes"
254
+ prompt_bindings_help: "Elige qué prompts y prompts tipo agent consumirán esta skill en runtime."
255
+ prompt_library_help: "Asocia skills reutilizables que enriquecen el runtime del prompt con comportamiento, tools y contexto compartidos."
256
+ prompt_bindings_summary: "{count} prompts/agentes usan esta skill."
257
+ prompt_bindings_runtime_help: "Solo las skills activas se resuelven en runtime. Los bindings draft o archived siguen visibles aquí para mantenimiento."
258
+ prompt_bindings_missing: "Skills faltantes: {names}"
259
+ version_history_title: "Historial de Versiones"
260
+ select_skill_versions: "Selecciona una skill para cargar versiones."
261
+ snapshot_detail_title: "Detalle del Snapshot"
262
+ summary_label: "Resumen"
263
+ raw_snapshot_label: "Snapshot crudo"
264
+ restore_selected_version: "Restaurar versión seleccionada"
265
+ workspace_placeholder: "Las skills empaquetan comportamiento reutilizable, tools y recursos para prompts y agentes."
266
+ new_skill_title: "Nueva Skill"
267
+ new_skill_description_placeholder: "Guía reutilizable para prompts y agentes orientados a research."
268
+ create_skill: "Crear skill"
269
+ open_library: "Abrir librería de Skills"
270
+ loading: "Cargando skills..."
271
+ empty: "No se encontraron skills."
272
+ load_failed: "No se pudieron cargar las skills."
273
+ prompt_bindings_load_failed: "No se pudieron cargar las skills del prompt."
274
+ prompts_save_failed: "No se pudieron guardar los bindings de prompts."
275
+ discard_confirm: "Tienes cambios sin guardar. ¿Quieres descartarlos?"
276
+ name_required: "Nombre y key son obligatorios."
277
+ create_failed: "No se pudo crear la skill."
278
+ create_ok: "Skill creada."
279
+ usage_summary: "{prompts} prompts/agentes · {resources} recursos"
280
+ tools_loading: "Cargando tools..."
281
+ no_tools: "No hay tools disponibles."
282
+ tools_summary_inherit: "Esta skill hereda la selección de tools desde el prompt."
283
+ tools_summary_explicit: "{count} tools explícitas seleccionadas."
284
+ no_prompts: "No hay prompts disponibles."
285
+ no_versions: "Todavía no hay versiones guardadas."
286
+ unknown_user: "Usuario desconocido"
287
+ invalid_payload: "Payload de skill inválido."
288
+ save_failed: "No se pudo guardar la skill."
289
+ resources_save_failed: "No se pudieron guardar los bindings de recursos."
290
+ save_ok: "Skill guardada correctamente."
291
+ archive_confirm: "¿Archivar esta skill?"
292
+ archive_failed: "No se pudo archivar la skill."
293
+ archive_ok: "Skill archivada."
294
+ restore_confirm: "¿Restaurar esta versión? Los cambios actuales serán reemplazados."
295
+ restore_failed: "No se pudo restaurar la versión de la skill."
296
+ restore_ok: "Versión de skill restaurada."
297
+ readonly_message: "La edición de skills requiere rol admin u owner."
298
+ uncategorized: "Sin categoría"
299
+ binding_label: "Binding {number}"
300
+ resource_type_label: "Tipo de recurso"
301
+ resource_key_label: "Key del recurso"
302
+ resource_key_placeholder: "routing.yaml o nombre de colección"
303
+ metadata_json_label: "Metadata JSON"
304
+ prompt_type_agent: "Agente"
305
+ prompt_type_prompt: "Prompt"
306
+ resource_type_tool: "Tool"
307
+ resource_type_rag_collection: "Colección RAG"
308
+ resource_type_sql_source: "Fuente SQL"
309
+ resource_type_sql_dataset: "Dataset SQL"
310
+ resource_type_config: "Config"
311
+ resource_type_static_text: "Texto estático"
312
+ version_detail_meta: "v{version} · {created_at} · {created_by}"
313
+ saving: "Guardando..."
204
314
 
205
315
  ops_mobile:
206
316
  title: "Ops Mobile"
@@ -344,6 +454,15 @@ ui:
344
454
  error_deleting_profile: "Error al eliminar el perfil de procesamiento"
345
455
  profile_deleted: "Perfil de procesamiento eliminado."
346
456
  refresh_runs: "Actualizar ejecuciones"
457
+ filter_status_all: "Todos los estados"
458
+ filter_status_active: "Activas"
459
+ filter_status_attention: "Requieren atención"
460
+ time_filter: "Tiempo"
461
+ filter_time_3h: "Últimas 3 horas"
462
+ filter_time_24h: "Últimas 24 horas"
463
+ filter_time_7d: "Últimos 7 días"
464
+ filter_time_all: "Todo el historial"
465
+ default_view: "Vista por defecto"
347
466
  run_id: "Ejecución"
348
467
  run_profile: "Perfil"
349
468
  run_status: "Estado"
@@ -363,8 +482,10 @@ ui:
363
482
  run_completed_short: "C"
364
483
  run_failed_short: "F"
365
484
  no_runs: "Todavía no hay ejecuciones."
485
+ no_runs_match_filters: "No hay ejecuciones que coincidan con los filtros actuales."
366
486
  error_loading_runs: "Error al cargar ejecuciones"
367
487
  error_loading_run_detail: "Error al cargar el detalle de la ejecución"
488
+ showing_runs: "Mostrando"
368
489
  view_run: "Ver ejecución"
369
490
  view_result: "Ver resultado"
370
491
  run_detail_title: "Ejecución del pipeline"
@@ -393,11 +514,15 @@ ui:
393
514
  artifact_rows: "Filas"
394
515
  download_artifact: "Descargar"
395
516
  progress_label: "Progreso"
517
+ progress_pending_discovery: "El progreso global aparecerá cuando termine el descubrimiento."
518
+ progress_pending_discovery_short: "Descubrimiento pendiente"
396
519
  auto_refresh_on: "Actualización en vivo activa"
397
520
  auto_refresh_paused: "Actualización en vivo pausada"
398
521
  task_progress: "Progreso de la task"
399
522
  files_counter: "Archivos"
400
523
  items_counter: "Items"
524
+ submitted_label: "encolados"
525
+ run_phase: "Fase de la ejecución"
401
526
  task_stage_pending: "Pendiente"
402
527
  task_stage_started: "Iniciada"
403
528
  task_stage_preprocessing_attachments: "Preprocesando adjuntos"
@@ -833,6 +958,7 @@ ui:
833
958
  save_btn: "Guardar"
834
959
  tab_editor: "Editor"
835
960
  tab_output: "Salida"
961
+ tab_tools: "Tools"
836
962
  tab_playground: "Playground"
837
963
  config_title: "Configuración"
838
964
  desc_label: "Descripción"
@@ -885,6 +1011,26 @@ ui:
885
1011
  store_response_default: "Por defecto del provider"
886
1012
  store_response_true: "Sí"
887
1013
  store_response_false: "No"
1014
+ tools_title: "Selección de Tools"
1015
+ tools_mode_label: "Modo de Tools"
1016
+ tools_mode_inherit: "Automático"
1017
+ tools_mode_explicit: "Explícito"
1018
+ tools_mode_help: "En modo explícito, el prompt enviará solo las tools seleccionadas y saltará el router."
1019
+ tools_search_placeholder: "Buscar tools..."
1020
+ tools_summary_inherit: "Este prompt usa la selección automática de tools."
1021
+ tools_summary_explicit: "Este prompt enviará {count} tools seleccionadas."
1022
+ tools_empty_state: "No hay tools disponibles para seleccionar."
1023
+ tools_loading: "Cargando tools..."
1024
+ tools_load_failed: "No se pudieron cargar las tools."
1025
+ tools_selection_required: "Selecciona al menos una tool cuando uses el modo explícito."
1026
+ tools_missing_warning: "Estas tools ya no existen en la compañía: {names}"
1027
+ tools_inactive_warning: "Estas tools están inactivas y no se enviarán: {names}"
1028
+ tools_source_system: "SYSTEM"
1029
+ tools_source_pack: "PACK"
1030
+ tools_source_user: "USER"
1031
+ tools_type_http: "HTTP"
1032
+ tools_type_native: "NATIVE"
1033
+ tools_type_system: "SYSTEM"
888
1034
  run_btn: "Ejecutar"
889
1035
  copy_html_btn: "Copiar HTML"
890
1036
  copy_json_btn: "Copiar JSON"
@@ -187,6 +187,7 @@ class LLMQueryRepo:
187
187
  prompt.attachment_fallback = new_prompt.attachment_fallback or prompt.attachment_fallback or "extract"
188
188
  prompt.llm_model = new_prompt.llm_model
189
189
  prompt.llm_request_options = dict(new_prompt.llm_request_options or {})
190
+ prompt.tool_policy = dict(new_prompt.tool_policy or {})
190
191
  else:
191
192
  if not new_prompt.output_schema_mode:
192
193
  new_prompt.output_schema_mode = "best_effort"
@@ -200,6 +201,8 @@ class LLMQueryRepo:
200
201
  new_prompt.attachment_fallback = "extract"
201
202
  if new_prompt.llm_request_options is None:
202
203
  new_prompt.llm_request_options = {}
204
+ if new_prompt.tool_policy is None:
205
+ new_prompt.tool_policy = {}
203
206
  self.session.add(new_prompt)
204
207
  prompt = new_prompt
205
208
 
@@ -558,6 +558,7 @@ class Prompt(Base):
558
558
  attachment_fallback = Column(String, nullable=False, default="extract")
559
559
  llm_model = Column(String, nullable=True, default=None)
560
560
  llm_request_options = Column(JSON_NATIVE, nullable=False, default=dict)
561
+ tool_policy = Column(JSON_NATIVE, nullable=False, default=dict)
561
562
  created_at = Column(DateTime, default=datetime.now)
562
563
  def to_dict(self):
563
564
  return {column.key: getattr(self, column.key) for column in class_mapper(self.__class__).columns}
@@ -3,6 +3,7 @@
3
3
  #
4
4
  # IAToolkit is open source software.
5
5
 
6
+ import ast
6
7
  import json
7
8
  import logging
8
9
  import re
@@ -396,10 +397,13 @@ class VSRepo:
396
397
  return None
397
398
  try:
398
399
  decoded = json.loads(candidate)
399
- except Exception as exc:
400
- raise ValueError(
401
- "metadata_filter string must be empty/null or valid JSON representing a dictionary or a list of {key, value}"
402
- ) from exc
400
+ except Exception:
401
+ try:
402
+ decoded = ast.literal_eval(candidate)
403
+ except Exception as exc:
404
+ raise ValueError(
405
+ "metadata_filter string must be empty/null or valid JSON representing a dictionary or a list of {key, value}"
406
+ ) from exc
403
407
  return VSRepo._normalize_metadata_filter_input(decoded)
404
408
 
405
409
  if isinstance(metadata_filter, dict):
@@ -551,7 +551,13 @@ class ConfigurationService:
551
551
  if not isinstance(llm_request_options, dict):
552
552
  add_error(f"prompts[{i}].llm_request_options", "Must be an object.")
553
553
  else:
554
- allowed_option_keys = {"reasoning_effort", "store", "text_verbosity"}
554
+ allowed_option_keys = {
555
+ "reasoning_effort",
556
+ "store",
557
+ "text_verbosity",
558
+ "prompt_version",
559
+ "prompt_variant",
560
+ }
555
561
  unknown_option_keys = sorted(
556
562
  key for key in llm_request_options.keys() if key not in allowed_option_keys
557
563
  )
@@ -581,6 +587,61 @@ class ConfigurationService:
581
587
  f"Unsupported value '{text_verbosity}'. Must be one of: {sorted(allowed_text_verbosity)}.",
582
588
  )
583
589
 
590
+ if "prompt_version" in llm_request_options:
591
+ prompt_version = str(llm_request_options.get("prompt_version") or "").strip()
592
+ if not prompt_version:
593
+ add_error(
594
+ f"prompts[{i}].llm_request_options.prompt_version",
595
+ "Must be a non-empty string.",
596
+ )
597
+
598
+ if "prompt_variant" in llm_request_options:
599
+ prompt_variant = str(llm_request_options.get("prompt_variant") or "").strip()
600
+ if not prompt_variant:
601
+ add_error(
602
+ f"prompts[{i}].llm_request_options.prompt_variant",
603
+ "Must be a non-empty string.",
604
+ )
605
+
606
+ tool_policy = prompt.get("tool_policy")
607
+ if tool_policy is not None:
608
+ if not isinstance(tool_policy, dict):
609
+ add_error(f"prompts[{i}].tool_policy", "Must be an object.")
610
+ else:
611
+ allowed_tool_policy_keys = {"mode", "tool_names"}
612
+ unknown_tool_policy_keys = sorted(
613
+ key for key in tool_policy.keys() if key not in allowed_tool_policy_keys
614
+ )
615
+ if unknown_tool_policy_keys:
616
+ add_error(
617
+ f"prompts[{i}].tool_policy",
618
+ f"Unsupported keys: {unknown_tool_policy_keys}.",
619
+ )
620
+
621
+ tool_policy_mode = str(tool_policy.get("mode") or "inherit").strip().lower()
622
+ if tool_policy_mode not in {"inherit", "explicit"}:
623
+ add_error(
624
+ f"prompts[{i}].tool_policy.mode",
625
+ "Unsupported value "
626
+ f"'{tool_policy_mode}'. Must be one of: {sorted(['explicit', 'inherit'])}.",
627
+ )
628
+
629
+ tool_names = tool_policy.get("tool_names", [])
630
+ if tool_names is None:
631
+ tool_names = []
632
+ if not isinstance(tool_names, list):
633
+ add_error(f"prompts[{i}].tool_policy.tool_names", "Must be a list.")
634
+ else:
635
+ normalized_tool_names = []
636
+ for tool_name_index, tool_name in enumerate(tool_names):
637
+ if not isinstance(tool_name, str) or not tool_name.strip():
638
+ add_error(
639
+ f"prompts[{i}].tool_policy.tool_names[{tool_name_index}]",
640
+ "Must be a non-empty string.",
641
+ )
642
+ else:
643
+ normalized_tool_names.append(tool_name.strip())
644
+
584
645
  output_schema = prompt.get("output_schema")
585
646
  if output_schema is not None:
586
647
  if not isinstance(output_schema, dict):
@@ -107,6 +107,9 @@ class ContextBuilderService:
107
107
  "attachment_fallback": getattr(prompt_obj, "attachment_fallback", None),
108
108
  "llm_model": getattr(prompt_obj, "llm_model", None),
109
109
  "llm_request_options": dict(getattr(prompt_obj, "llm_request_options", None) or {}),
110
+ "tool_policy": self.prompt_service.normalize_tool_policy(
111
+ getattr(prompt_obj, "tool_policy", None)
112
+ ),
110
113
  }
111
114
 
112
115
  def build_system_context(