iatoolkit 2.47.2__tar.gz → 2.49.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 (253) hide show
  1. {iatoolkit-2.47.2/src/iatoolkit.egg-info → iatoolkit-2.49.0}/PKG-INFO +1 -1
  2. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/__init__.py +1 -1
  3. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/locales/en.yaml +93 -0
  4. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/locales/es.yaml +93 -0
  5. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/repositories/models.py +29 -0
  6. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/configuration_service.py +37 -0
  7. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/mcp_token_service.py +50 -2
  8. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/prompt_service.py +44 -0
  9. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/tool_service.py +4 -0
  10. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/prompt_api_view.py +2 -0
  11. {iatoolkit-2.47.2 → iatoolkit-2.49.0/src/iatoolkit.egg-info}/PKG-INFO +1 -1
  12. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/LICENSE +0 -0
  13. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/LICENSE_COMMUNITY.md +0 -0
  14. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/pyproject.toml +0 -0
  15. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/readme.md +0 -0
  16. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/requirements.txt +0 -0
  17. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/setup.cfg +0 -0
  18. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/base_company.py +0 -0
  19. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/cli_commands.py +0 -0
  20. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/common/__init__.py +0 -0
  21. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/common/bridge_validation.py +0 -0
  22. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/common/exceptions.py +0 -0
  23. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/__init__.py +0 -0
  24. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
  25. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
  26. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
  27. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
  28. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
  29. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
  30. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
  31. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/common/model_registry.py +0 -0
  32. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/common/routes.py +0 -0
  33. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/common/secret_resolver.py +0 -0
  34. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/common/session_manager.py +0 -0
  35. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/common/url_safety.py +0 -0
  36. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/common/util.py +0 -0
  37. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/company_registry.py +0 -0
  38. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/__init__.py +0 -0
  39. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
  40. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
  41. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
  42. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
  43. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
  44. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
  45. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
  46. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
  47. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
  48. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
  49. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
  50. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
  51. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
  52. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
  53. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
  54. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
  55. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
  56. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
  57. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
  58. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
  59. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
  60. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
  61. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
  62. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
  63. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
  64. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
  65. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
  66. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
  67. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
  68. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/core.py +0 -0
  69. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/__init__.py +0 -0
  70. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
  71. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/call_service.py +0 -0
  72. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  73. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  74. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  75. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  76. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  77. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  78. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  79. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/google_auth_client.py +0 -0
  80. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/google_chat_app.py +0 -0
  81. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
  82. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/inference_handler.py +0 -0
  83. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
  84. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
  85. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
  86. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
  87. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
  88. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
  89. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
  90. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
  91. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
  92. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_proxy.py +0 -0
  93. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_response.py +0 -0
  94. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  95. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/repositories/__init__.py +0 -0
  96. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/repositories/api_key_repo.py +0 -0
  97. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/repositories/bridge_repo.py +0 -0
  98. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/repositories/database_manager.py +0 -0
  99. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/repositories/document_repo.py +0 -0
  100. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
  101. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
  102. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
  103. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
  104. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
  105. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/repositories/memory_repo.py +0 -0
  106. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/repositories/profile_repo.py +0 -0
  107. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
  108. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
  109. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
  110. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/repositories/vs_repo.py +0 -0
  111. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/runtime_logging.py +0 -0
  112. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/__init__.py +0 -0
  113. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/api_key_service.py +0 -0
  114. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/attachment_policy_service.py +0 -0
  115. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/auth_service.py +0 -0
  116. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/benchmark_service.py +0 -0
  117. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/branding_service.py +0 -0
  118. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/company_context_service.py +0 -0
  119. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/context_builder_service.py +0 -0
  120. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/dispatcher_service.py +0 -0
  121. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/embedding_service.py +0 -0
  122. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/excel_service.py +0 -0
  123. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/file_processor_service.py +0 -0
  124. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/history_manager_service.py +0 -0
  125. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/http_tool_service.py +0 -0
  126. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/i18n_service.py +0 -0
  127. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/inference_service.py +0 -0
  128. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/jwt_service.py +0 -0
  129. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/knowledge_base_service.py +0 -0
  130. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/language_service.py +0 -0
  131. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/license_service.py +0 -0
  132. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/llm_client_service.py +0 -0
  133. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/mail_service.py +0 -0
  134. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
  135. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/memory_compiler_service.py +0 -0
  136. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/memory_lint_service.py +0 -0
  137. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
  138. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/memory_service.py +0 -0
  139. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/memory_wiki_service.py +0 -0
  140. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
  141. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
  142. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/operator_identity_service.py +0 -0
  143. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/__init__.py +0 -0
  144. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/contracts.py +0 -0
  145. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
  146. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
  147. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
  148. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
  149. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
  150. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
  151. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
  152. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
  153. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/validator.py +0 -0
  154. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/pdf_service.py +0 -0
  155. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/profile_service.py +0 -0
  156. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/prompt_resource_service.py +0 -0
  157. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/query_service.py +0 -0
  158. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
  159. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/sql_dataset_service.py +0 -0
  160. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/sql_service.py +0 -0
  161. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/sql_source_service.py +0 -0
  162. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/storage_service.py +0 -0
  163. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/structured_output_service.py +0 -0
  164. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
  165. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/system_tools.py +0 -0
  166. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/telemetry_service.py +0 -0
  167. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
  168. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/tool_output_contract.py +0 -0
  169. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/user_feedback_service.py +0 -0
  170. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/user_session_context_service.py +0 -0
  171. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/visual_kb_service.py +0 -0
  172. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/visual_tool_service.py +0 -0
  173. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/warmup_service.py +0 -0
  174. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/web_search/__init__.py +0 -0
  175. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
  176. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
  177. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
  178. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/services/web_search_service.py +0 -0
  179. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  180. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
  181. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
  182. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  183. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  184. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_help_content.js +0 -0
  185. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  186. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  187. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_main.js +0 -0
  188. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
  189. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
  190. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  191. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  192. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  193. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  194. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  195. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/styles/chat_public.css +0 -0
  196. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/styles/documents.css +0 -0
  197. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/styles/landing_page.css +0 -0
  198. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/styles/llm_output.css +0 -0
  199. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/static/styles/onboarding.css +0 -0
  200. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/_company_header.html +0 -0
  201. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/_login_widget.html +0 -0
  202. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/account.html +0 -0
  203. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/base.html +0 -0
  204. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/change_password.html +0 -0
  205. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/chat.html +0 -0
  206. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
  207. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/chat_modals.html +0 -0
  208. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/error.html +0 -0
  209. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/forgot_password.html +0 -0
  210. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/home_hosted_default.html +0 -0
  211. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
  212. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  213. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/pdf/base.html +0 -0
  214. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/pdf/letter.html +0 -0
  215. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/pdf/report.html +0 -0
  216. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/pdf/simple.html +0 -0
  217. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/templates/signup.html +0 -0
  218. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/__init__.py +0 -0
  219. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/account_view.py +0 -0
  220. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/api_key_api_view.py +0 -0
  221. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/base_login_view.py +0 -0
  222. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/categories_api_view.py +0 -0
  223. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/change_password_view.py +0 -0
  224. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
  225. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/chat_view.py +0 -0
  226. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/configuration_api_view.py +0 -0
  227. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/connectors_api_view.py +0 -0
  228. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/embedding_api_view.py +0 -0
  229. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/forgot_password_view.py +0 -0
  230. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/help_content_api_view.py +0 -0
  231. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/history_api_view.py +0 -0
  232. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/home_view.py +0 -0
  233. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/init_context_api_view.py +0 -0
  234. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  235. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/load_document_api_view.py +0 -0
  236. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/login_view.py +0 -0
  237. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/logout_api_view.py +0 -0
  238. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/memory_api_view.py +0 -0
  239. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/profile_api_view.py +0 -0
  240. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
  241. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
  242. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/rag_api_view.py +0 -0
  243. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/root_redirect_view.py +0 -0
  244. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/signup_view.py +0 -0
  245. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/static_page_view.py +0 -0
  246. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/tool_api_view.py +0 -0
  247. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  248. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/users_api_view.py +0 -0
  249. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit/views/verify_user_view.py +0 -0
  250. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
  251. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  252. {iatoolkit-2.47.2 → iatoolkit-2.49.0}/src/iatoolkit.egg-info/requires.txt +0 -0
  253. {iatoolkit-2.47.2 → iatoolkit-2.49.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.47.2
3
+ Version: 2.49.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.47.2"
6
+ __version__ = "2.49.0"
7
7
 
8
8
  # Expose main classes and functions at the top level of the package
9
9
 
@@ -1038,6 +1038,92 @@ ui:
1038
1038
  status_auth_redirect: "Auth redirect"
1039
1039
  unknown_client: "unknown client"
1040
1040
 
1041
+ scheduled_jobs:
1042
+ title: "Scheduled jobs"
1043
+ schedules: "Schedules"
1044
+ runs: "History"
1045
+ schedules_title: "Scheduled executions"
1046
+ runs_title: "Run history"
1047
+ loading: "Loading..."
1048
+ show_disabled: "Show disabled"
1049
+ new_schedule: "New schedule"
1050
+ edit_schedule: "Edit schedule"
1051
+ search_placeholder: "Search schedules or targets"
1052
+ refresh: "Refresh"
1053
+ name: "Name"
1054
+ schedule: "Schedule"
1055
+ next_run: "Next run"
1056
+ last_result: "Last result"
1057
+ enabled: "Enabled"
1058
+ disabled: "Disabled"
1059
+ actions: "Actions"
1060
+ all_schedules: "All schedules"
1061
+ status: "Status"
1062
+ all_statuses: "All statuses"
1063
+ default_view: "Default view"
1064
+ run: "Run"
1065
+ scheduled_for: "Scheduled for"
1066
+ duration: "Duration"
1067
+ detail: "Detail"
1068
+ identity: "Identity"
1069
+ target: "Target"
1070
+ target_type: "What to run"
1071
+ target_type_tool: "Tool"
1072
+ target_type_native_job: "Native job"
1073
+ target_type_pipeline: "Pipeline"
1074
+ timing: "Timing"
1075
+ cron_expression: "Cron expression"
1076
+ cron_help_format: "Format: minute, hour, day of month, month, day of week."
1077
+ cron_every_10_minutes: "every 10 min"
1078
+ cron_daily_at_3: "daily at 03:00"
1079
+ cron_weekdays_at_9: "weekdays at 09:00"
1080
+ timezone: "Timezone"
1081
+ parameters: "Parameters"
1082
+ arguments_help: "Sent to the target on every run."
1083
+ arguments_help_pipeline: 'Pipeline filters: {"filters": {...}}'
1084
+ execution: "Execution"
1085
+ queue: "Queue"
1086
+ timeout_seconds: "Timeout (seconds)"
1087
+ max_retries: "Retries"
1088
+ arguments_json: "Arguments (JSON)"
1089
+ policies: "Policies"
1090
+ misfire_policy: "After downtime"
1091
+ policy_skip: "Skip"
1092
+ policy_run_once: "Run once"
1093
+ policy_catch_up: "Catch up"
1094
+ grace_seconds: "Grace (seconds)"
1095
+ max_catch_up: "Catch-up limit"
1096
+ overlap_policy: "When a previous run is active"
1097
+ overlap_skip: "Skip new run"
1098
+ overlap_allow: "Allow overlap"
1099
+ delete_title: "Delete schedule?"
1100
+ delete_message: "The schedule and its run history will be permanently deleted."
1101
+ summary: "{active} active of {total}"
1102
+ empty: "No schedules found."
1103
+ run_now: "Run now"
1104
+ view_runs: "View runs"
1105
+ runs_summary: "{count} recent runs"
1106
+ runs_empty: "No runs found."
1107
+ attempt: "Attempt {count}"
1108
+ select_tool: "Select a tool"
1109
+ select_native_job: "Select a native job"
1110
+ select_pipeline: "Select a pipeline"
1111
+ invalid_arguments_json: "Arguments must be a valid JSON object."
1112
+ request_failed: "Request failed"
1113
+ saved: "Schedule saved."
1114
+ enabled_success: "Schedule enabled."
1115
+ disabled_success: "Schedule disabled."
1116
+ run_queued: "Run queued."
1117
+ deleted: "Schedule deleted."
1118
+ status_never: "Never run"
1119
+ status_pending: "Pending"
1120
+ status_queued: "Queued"
1121
+ status_running: "Running"
1122
+ status_retrying: "Retrying"
1123
+ status_succeeded: "Succeeded"
1124
+ status_failed: "Failed"
1125
+ status_skipped: "Skipped"
1126
+
1041
1127
  pipelines:
1042
1128
  source_root_label: "Root (prefix)"
1043
1129
  source_root_placeholder: "companies/<company_short_name>/..."
@@ -1714,6 +1800,13 @@ ui:
1714
1800
  queue_tier_default: "Default"
1715
1801
  queue_tier_low: "Low priority"
1716
1802
  queue_tier_help: "Low priority agents run only after the normal agents queue is empty."
1803
+ runtime_provider_label: "Provider"
1804
+ runtime_provider_query_service: "Default (uses LLM query)"
1805
+ runtime_provider_openai_agents: "OpenAI Agents"
1806
+ runtime_config_label: "Runtime config"
1807
+ runtime_config_help: "Choose the runtime and, when needed, pass OpenAI Agents harness attributes. The tenant MCP is attached automatically."
1808
+ runtime_config_json_label: "Config JSON"
1809
+ runtime_config_json_help: "Optional JSON for runtime details such as environment, instructions, web_search, multi_agent or MCP connection attributes like mcp.service_token_id/service_token_name. MCP tool exposure is managed in the MCP admin."
1717
1810
  active_label: "Active"
1718
1811
  output_type_label: "Output Type"
1719
1812
  output_type_free_text: "Free text"
@@ -1053,6 +1053,92 @@ ui:
1053
1053
  unknown_client: "cliente desconocido"
1054
1054
 
1055
1055
 
1056
+ scheduled_jobs:
1057
+ title: "Jobs programados"
1058
+ schedules: "Programaciones"
1059
+ runs: "Historial"
1060
+ schedules_title: "Ejecuciones programadas"
1061
+ runs_title: "Historial de ejecuciones"
1062
+ loading: "Cargando..."
1063
+ show_disabled: "Mostrar deshabilitados"
1064
+ new_schedule: "Nueva programación"
1065
+ edit_schedule: "Editar programación"
1066
+ search_placeholder: "Buscar programaciones o destinos"
1067
+ refresh: "Actualizar"
1068
+ name: "Nombre"
1069
+ schedule: "Programación"
1070
+ next_run: "Próxima ejecución"
1071
+ last_result: "Último resultado"
1072
+ enabled: "Habilitada"
1073
+ disabled: "Deshabilitada"
1074
+ actions: "Acciones"
1075
+ all_schedules: "Todas las programaciones"
1076
+ status: "Estado"
1077
+ all_statuses: "Todos los estados"
1078
+ default_view: "Vista por defecto"
1079
+ run: "Ejecución"
1080
+ scheduled_for: "Programada para"
1081
+ duration: "Duración"
1082
+ detail: "Detalle"
1083
+ identity: "Identidad"
1084
+ target: "Destino"
1085
+ target_type: "Qué ejecutar"
1086
+ target_type_tool: "Tool"
1087
+ target_type_native_job: "Job nativo"
1088
+ target_type_pipeline: "Pipeline"
1089
+ timing: "Horario"
1090
+ cron_expression: "Expresión cron"
1091
+ cron_help_format: "Formato: minuto, hora, día del mes, mes, día de la semana."
1092
+ cron_every_10_minutes: "cada 10 min"
1093
+ cron_daily_at_3: "diariamente a las 03:00"
1094
+ cron_weekdays_at_9: "lunes a viernes a las 09:00"
1095
+ timezone: "Zona horaria"
1096
+ parameters: "Parámetros"
1097
+ arguments_help: "Se envía al destino en cada ejecución."
1098
+ arguments_help_pipeline: 'Filtros del pipeline: {"filters": {...}}'
1099
+ execution: "Ejecución"
1100
+ queue: "Cola"
1101
+ timeout_seconds: "Timeout (segundos)"
1102
+ max_retries: "Reintentos"
1103
+ arguments_json: "Argumentos (JSON)"
1104
+ policies: "Políticas"
1105
+ misfire_policy: "Después de una interrupción"
1106
+ policy_skip: "Omitir"
1107
+ policy_run_once: "Ejecutar una vez"
1108
+ policy_catch_up: "Recuperar pendientes"
1109
+ grace_seconds: "Tolerancia (segundos)"
1110
+ max_catch_up: "Límite de recuperación"
1111
+ overlap_policy: "Cuando una ejecución anterior sigue activa"
1112
+ overlap_skip: "Omitir nueva ejecución"
1113
+ overlap_allow: "Permitir solapamiento"
1114
+ delete_title: "¿Eliminar programación?"
1115
+ delete_message: "La programación y su historial de ejecuciones se eliminarán permanentemente."
1116
+ summary: "{active} activas de {total}"
1117
+ empty: "No se encontraron programaciones."
1118
+ run_now: "Ejecutar ahora"
1119
+ view_runs: "Ver ejecuciones"
1120
+ runs_summary: "{count} ejecuciones recientes"
1121
+ runs_empty: "No se encontraron ejecuciones."
1122
+ attempt: "Intento {count}"
1123
+ select_tool: "Selecciona una tool"
1124
+ select_native_job: "Selecciona un job nativo"
1125
+ select_pipeline: "Selecciona un pipeline"
1126
+ invalid_arguments_json: "Los argumentos deben ser un objeto JSON válido."
1127
+ request_failed: "La solicitud falló"
1128
+ saved: "Programación guardada."
1129
+ enabled_success: "Programación habilitada."
1130
+ disabled_success: "Programación deshabilitada."
1131
+ run_queued: "Ejecución encolada."
1132
+ deleted: "Programación eliminada."
1133
+ status_never: "Nunca ejecutada"
1134
+ status_pending: "Pendiente"
1135
+ status_queued: "En cola"
1136
+ status_running: "Ejecutando"
1137
+ status_retrying: "Reintentando"
1138
+ status_succeeded: "Exitosa"
1139
+ status_failed: "Fallida"
1140
+ status_skipped: "Omitida"
1141
+
1056
1142
  pipelines:
1057
1143
  source_root_label: "Raiz (prefijo)"
1058
1144
  source_root_placeholder: "companies/<company_short_name>/..."
@@ -1731,6 +1817,13 @@ ui:
1731
1817
  queue_tier_default: "Por defecto"
1732
1818
  queue_tier_low: "Baja prioridad"
1733
1819
  queue_tier_help: "Los agentes de baja prioridad solo se ejecutan cuando la cola normal de agentes está vacía."
1820
+ runtime_provider_label: "Provider"
1821
+ runtime_provider_query_service: "Default (usa LLM query)"
1822
+ runtime_provider_openai_agents: "OpenAI Agents"
1823
+ runtime_config_label: "Configuración runtime"
1824
+ runtime_config_help: "Elige el runtime y, cuando haga falta, pasa atributos del arnés de OpenAI Agents. El MCP del tenant se adjunta automáticamente."
1825
+ runtime_config_json_label: "JSON de configuración"
1826
+ runtime_config_json_help: "JSON opcional para detalles runtime como environment, instructions, web_search, multi_agent o atributos de conexión MCP como mcp.service_token_id/service_token_name. La exposición de tools se administra en el MCP admin."
1734
1827
  active_label: "Activo"
1735
1828
  output_type_label: "Tipo de Salida"
1736
1829
  output_type_free_text: "Texto libre"
@@ -45,6 +45,11 @@ class PromptAgentRole(str, enum.Enum):
45
45
  OPERATIONS = "operations"
46
46
 
47
47
 
48
+ class PromptRuntimeProvider(str, enum.Enum):
49
+ QUERY_SERVICE = "query_service"
50
+ OPENAI_AGENTS = "openai_agents"
51
+
52
+
48
53
  class PromptResourceType(str, enum.Enum):
49
54
  SQL_SOURCE = "sql_source"
50
55
  RAG_COLLECTION = "rag_collection"
@@ -358,6 +363,7 @@ class Tool(Base):
358
363
 
359
364
  # source of the definition (Source of Truth)
360
365
  SOURCE_SYSTEM = 'SYSTEM'
366
+ SOURCE_EXTENSION = 'EXTENSION' # registered by an installed runtime extension
361
367
  SOURCE_YAML = 'YAML' # defined in company.yaml
362
368
  SOURCE_USER = 'USER' # defined via GUI/API
363
369
  SOURCE_PACK = 'PACK' # materialized by enterprise control-plane
@@ -895,6 +901,29 @@ class Prompt(Base):
895
901
  def context_policy(self, value: dict | None):
896
902
  self._set_runtime_policy_value("context", dict(value or {}))
897
903
 
904
+ @property
905
+ def runtime_provider(self) -> str:
906
+ provider = str((self.runtime_policy or {}).get("runtime_provider") or "").strip().lower()
907
+ if provider in {item.value for item in PromptRuntimeProvider}:
908
+ return provider
909
+ return PromptRuntimeProvider.QUERY_SERVICE.value
910
+
911
+ @runtime_provider.setter
912
+ def runtime_provider(self, value: str | None):
913
+ provider = str(value or "").strip().lower()
914
+ if provider not in {item.value for item in PromptRuntimeProvider}:
915
+ provider = PromptRuntimeProvider.QUERY_SERVICE.value
916
+ self._set_runtime_policy_value("runtime_provider", provider)
917
+
918
+ @property
919
+ def runtime_config(self) -> dict:
920
+ runtime_config = (self.runtime_policy or {}).get("runtime_config")
921
+ return dict(runtime_config or {}) if isinstance(runtime_config, dict) else {}
922
+
923
+ @runtime_config.setter
924
+ def runtime_config(self, value: dict | None):
925
+ self._set_runtime_policy_value("runtime_config", dict(value or {}))
926
+
898
927
 
899
928
  class PromptResourceBinding(Base):
900
929
  __tablename__ = "iat_prompt_resource_bindings"
@@ -492,6 +492,13 @@ class ConfigurationService:
492
492
  if not config.get("name"):
493
493
  add_error("General", "Missing required key: 'name'")
494
494
 
495
+ mcp_config = config.get("mcp")
496
+ if mcp_config is not None:
497
+ if not isinstance(mcp_config, dict):
498
+ add_error("mcp", "Must be a dictionary.")
499
+ else:
500
+ self._validate_mcp_url_config(mcp_config, add_error)
501
+
495
502
  # 2. LLM section
496
503
  if not isinstance(config.get("llm"), dict):
497
504
  add_error("llm", "Missing or invalid 'llm' section.")
@@ -784,6 +791,7 @@ class ConfigurationService:
784
791
  "operations",
785
792
  }
786
793
  allowed_queue_tiers = {"default", "low"}
794
+ allowed_runtime_providers = {"query_service", "openai_agents"}
787
795
  allowed_output_schema_modes = {"best_effort", "strict"}
788
796
  allowed_output_response_modes = {"chat_compatible", "structured_only"}
789
797
  allowed_attachment_modes = {"extracted_only", "native_only", "native_plus_extracted"}
@@ -837,6 +845,20 @@ class ConfigurationService:
837
845
  )
838
846
  continue
839
847
 
848
+ runtime_provider = str(runtime_policy.get("runtime_provider", "") or "").strip().lower()
849
+ if runtime_provider and runtime_provider not in allowed_runtime_providers:
850
+ add_error(
851
+ f"prompts[{i}].runtime_policy.runtime_provider",
852
+ "Unsupported runtime_policy.runtime_provider "
853
+ f"'{runtime_provider}'. Must be one of: {sorted(allowed_runtime_providers)}.",
854
+ )
855
+ continue
856
+
857
+ runtime_config = runtime_policy.get("runtime_config")
858
+ if runtime_config is not None and not isinstance(runtime_config, dict):
859
+ add_error(f"prompts[{i}].runtime_policy.runtime_config", "Must be a dictionary.")
860
+ continue
861
+
840
862
  if prompt_cat and prompt_cat not in category_set:
841
863
  add_error(f"prompts[{i}]", f"Category '{prompt_cat}' is not defined in 'prompt_categories'.")
842
864
 
@@ -1238,6 +1260,21 @@ class ConfigurationService:
1238
1260
 
1239
1261
  return errors
1240
1262
 
1263
+ @staticmethod
1264
+ def _validate_mcp_url_config(mcp_config: dict, add_error) -> None:
1265
+ for key in ("server_url", "public_server_url", "public_url", "public_base_url", "base_url", "public_base"):
1266
+ if key not in mcp_config or mcp_config.get(key) in (None, ""):
1267
+ continue
1268
+ raw_url = str(mcp_config.get(key) or "").strip()
1269
+ if not raw_url:
1270
+ continue
1271
+ if any(ch.isspace() for ch in raw_url):
1272
+ add_error(f"mcp.{key}", "Whitespace is not allowed.")
1273
+ continue
1274
+ parsed = urlparse(raw_url)
1275
+ if parsed.scheme != "https" or not parsed.netloc:
1276
+ add_error(f"mcp.{key}", "URL must be absolute HTTPS.")
1277
+
1241
1278
 
1242
1279
  def _set_nested_value(self, data: dict, key: str, value):
1243
1280
  """
@@ -4,6 +4,8 @@ import hashlib
4
4
  import os
5
5
  import secrets
6
6
  from datetime import datetime, timedelta
7
+ from typing import Any
8
+ from urllib.parse import quote, urlparse
7
9
 
8
10
  from injector import inject
9
11
  from sqlalchemy.exc import IntegrityError
@@ -12,6 +14,7 @@ from iatoolkit.common.util import Utility
12
14
  from iatoolkit.repositories.mcp_token_repo import McpTokenRepo
13
15
  from iatoolkit.repositories.models import McpToken
14
16
  from iatoolkit.repositories.profile_repo import ProfileRepo
17
+ from iatoolkit.services.configuration_service import ConfigurationService
15
18
  from iatoolkit.services.i18n_service import I18nService
16
19
 
17
20
 
@@ -28,11 +31,13 @@ class McpTokenService:
28
31
  profile_repo: ProfileRepo,
29
32
  token_repo: McpTokenRepo,
30
33
  utility: Utility,
34
+ configuration_service: ConfigurationService | None = None,
31
35
  ):
32
36
  self.i18n_service = i18n_service
33
37
  self.profile_repo = profile_repo
34
38
  self.token_repo = token_repo
35
39
  self.utility = utility
40
+ self.configuration_service = configuration_service
36
41
 
37
42
  def list_user_tokens(self, company_short_name: str, user_identifier: str) -> dict:
38
43
  company, error = self._get_company(company_short_name)
@@ -136,7 +141,7 @@ class McpTokenService:
136
141
  return {"error": self.i18n_service.t("errors.auth.mcp_pat_token_unavailable"), "status_code": 409}
137
142
 
138
143
  raw_token = self.utility.decrypt_key(token.token_encrypted)
139
- mcp_server_url = self.build_mcp_server_url(company_short_name)
144
+ mcp_server_url = self.resolve_mcp_server_url(company_short_name)
140
145
  payload = self._token_to_dict(token)
141
146
  payload["token"] = raw_token
142
147
  payload["mcp_server_url"] = mcp_server_url
@@ -172,6 +177,48 @@ class McpTokenService:
172
177
  "token_id": token.id,
173
178
  }
174
179
 
180
+ def resolve_mcp_server_url(self, company_short_name: str) -> str:
181
+ configured_url = self._configured_mcp_server_url(company_short_name)
182
+ if configured_url:
183
+ return configured_url
184
+ return self.build_mcp_server_url(company_short_name)
185
+
186
+ def _configured_mcp_server_url(self, company_short_name: str) -> str | None:
187
+ if self.configuration_service is None:
188
+ return None
189
+ try:
190
+ mcp_config = self.configuration_service.get_configuration(company_short_name, "mcp") or {}
191
+ except Exception:
192
+ return None
193
+ if not isinstance(mcp_config, dict):
194
+ return None
195
+ raw_url = (
196
+ mcp_config.get("server_url")
197
+ or mcp_config.get("public_server_url")
198
+ or mcp_config.get("public_url")
199
+ )
200
+ if not raw_url:
201
+ raw_base_url = (
202
+ mcp_config.get("public_base_url")
203
+ or mcp_config.get("base_url")
204
+ or mcp_config.get("public_base")
205
+ )
206
+ if raw_base_url:
207
+ raw_url = f"{str(raw_base_url).rstrip('/')}/{quote(str(company_short_name or '').strip(), safe='')}/mcp"
208
+ return self._normalize_mcp_server_url(raw_url, company_short_name=company_short_name)
209
+
210
+ @staticmethod
211
+ def _normalize_mcp_server_url(raw_url: Any, *, company_short_name: str) -> str | None:
212
+ url = str(raw_url or "").strip()
213
+ if not url:
214
+ return None
215
+ if any(ch.isspace() for ch in url):
216
+ raise ValueError(f"Invalid MCP server_url for tenant '{company_short_name}': whitespace is not allowed.")
217
+ parsed = urlparse(url)
218
+ if parsed.scheme != "https" or not parsed.netloc:
219
+ raise ValueError(f"Invalid MCP server_url for tenant '{company_short_name}': URL must be absolute HTTPS.")
220
+ return url.rstrip("/")
221
+
175
222
  @staticmethod
176
223
  def build_mcp_server_url(company_short_name: str) -> str:
177
224
  public_base_url = str(
@@ -180,7 +227,8 @@ class McpTokenService:
180
227
  or "https://mcp.iatoolkit.com"
181
228
  ).strip()
182
229
  public_base_url = public_base_url.rstrip("/")
183
- return f"{public_base_url}/{company_short_name}/mcp/"
230
+ tenant = quote(str(company_short_name or "").strip(), safe="")
231
+ return f"{public_base_url}/{tenant}/mcp"
184
232
 
185
233
  @staticmethod
186
234
  def build_mcp_connection_snippet(
@@ -15,6 +15,7 @@ from collections import defaultdict
15
15
  from iatoolkit.repositories.models import (
16
16
  Prompt,
17
17
  PromptAgentRole,
18
+ PromptRuntimeProvider,
18
19
  PromptCategory,
19
20
  Company,
20
21
  )
@@ -51,6 +52,8 @@ class PromptService:
51
52
  TOOL_POLICY_MODE_EXPLICIT = "explicit"
52
53
  QUEUE_TIER_DEFAULT = "default"
53
54
  QUEUE_TIER_LOW = "low"
55
+ RUNTIME_PROVIDER_QUERY_SERVICE = PromptRuntimeProvider.QUERY_SERVICE.value
56
+ RUNTIME_PROVIDER_OPENAI_AGENTS = PromptRuntimeProvider.OPENAI_AGENTS.value
54
57
  EXECUTION_MODE_CONVERSATIONAL = "conversational"
55
58
  EXECUTION_MODE_AGENTIC = "agentic"
56
59
  AGENT_ROLE_WORKSPACE_CHAT = PromptAgentRole.WORKSPACE_CHAT.value
@@ -250,11 +253,27 @@ class PromptService:
250
253
  return candidate
251
254
  return cls.QUEUE_TIER_DEFAULT
252
255
 
256
+ @classmethod
257
+ def normalize_runtime_provider_value(cls, runtime_provider: str | None) -> str:
258
+ candidate = str(runtime_provider or cls.RUNTIME_PROVIDER_QUERY_SERVICE).strip().lower()
259
+ if candidate in {
260
+ cls.RUNTIME_PROVIDER_QUERY_SERVICE,
261
+ cls.RUNTIME_PROVIDER_OPENAI_AGENTS,
262
+ }:
263
+ return candidate
264
+ return cls.RUNTIME_PROVIDER_QUERY_SERVICE
265
+
266
+ @classmethod
267
+ def normalize_runtime_config(cls, runtime_config: dict | None) -> dict:
268
+ return dict(runtime_config or {}) if isinstance(runtime_config, dict) else {}
269
+
253
270
  @classmethod
254
271
  def normalize_runtime_policy(cls, runtime_policy: dict | None) -> dict:
255
272
  policy = runtime_policy if isinstance(runtime_policy, dict) else {}
256
273
  role = cls.normalize_agent_role_value(policy.get("role"))
257
274
  queue_tier = cls.normalize_queue_tier_value(policy.get("queue_tier"))
275
+ runtime_provider = cls.normalize_runtime_provider_value(policy.get("runtime_provider"))
276
+ runtime_config = cls.normalize_runtime_config(policy.get("runtime_config"))
258
277
  raw_context = policy.get("context")
259
278
  context = cls.normalize_context_policy(
260
279
  raw_context if isinstance(raw_context, dict) else None,
@@ -265,6 +284,8 @@ class PromptService:
265
284
  "role": role,
266
285
  "queue_tier": queue_tier,
267
286
  "context": context,
287
+ "runtime_provider": runtime_provider,
288
+ "runtime_config": runtime_config,
268
289
  }
269
290
 
270
291
  @classmethod
@@ -279,6 +300,17 @@ class PromptService:
279
300
  def get_runtime_policy_context(cls, runtime_policy: dict | None) -> dict:
280
301
  return cls.normalize_runtime_policy(runtime_policy).get("context", cls.default_context_policy_for_agent_role(None))
281
302
 
303
+ @classmethod
304
+ def get_runtime_policy_provider(cls, runtime_policy: dict | None) -> str:
305
+ return cls.normalize_runtime_policy(runtime_policy).get(
306
+ "runtime_provider",
307
+ cls.RUNTIME_PROVIDER_QUERY_SERVICE,
308
+ )
309
+
310
+ @classmethod
311
+ def get_runtime_policy_config(cls, runtime_policy: dict | None) -> dict:
312
+ return cls.normalize_runtime_policy(runtime_policy).get("runtime_config", {})
313
+
282
314
  def _normalize_output_schema_mode(self, output_schema_mode: str | None) -> str:
283
315
  candidate = str(output_schema_mode or self.OUTPUT_SCHEMA_MODE_BEST_EFFORT).strip().lower()
284
316
  allowed = {
@@ -689,6 +721,8 @@ class PromptService:
689
721
  'llm_request_options': dict(getattr(p, 'llm_request_options', None) or {}),
690
722
  'tool_policy': dict(getattr(p, 'tool_policy', None) or {}),
691
723
  'context_policy': runtime_policy["context"],
724
+ 'runtime_provider': runtime_policy["runtime_provider"],
725
+ 'runtime_config': runtime_policy["runtime_config"],
692
726
  })
693
727
 
694
728
  categorized_prompts.append({
@@ -809,6 +843,16 @@ class PromptService:
809
843
  "role": role_value,
810
844
  "queue_tier": queue_tier_value,
811
845
  "context": context_value,
846
+ "runtime_provider": data.get(
847
+ "runtime_provider",
848
+ getattr(existing_prompt, "runtime_provider", existing_runtime_policy["runtime_provider"])
849
+ if existing_prompt is not None else existing_runtime_policy["runtime_provider"],
850
+ ),
851
+ "runtime_config": data.get(
852
+ "runtime_config",
853
+ getattr(existing_prompt, "runtime_config", existing_runtime_policy["runtime_config"])
854
+ if existing_prompt is not None else existing_runtime_policy["runtime_config"],
855
+ ),
812
856
  })
813
857
  agent_role = runtime_policy["role"]
814
858
  force_free_text_output = (
@@ -983,6 +983,8 @@ class ToolService:
983
983
  desired_names.discard("")
984
984
 
985
985
  for name, tool in existing_by_name.items():
986
+ if tool.source == Tool.SOURCE_EXTENSION:
987
+ continue
986
988
  if name not in desired_names and bool(tool.is_active):
987
989
  return True
988
990
 
@@ -1042,6 +1044,8 @@ class ToolService:
1042
1044
  desired_names.discard("")
1043
1045
  deactivated_tools = 0
1044
1046
  for name, tool in existing_by_name.items():
1047
+ if tool.source == Tool.SOURCE_EXTENSION:
1048
+ continue
1045
1049
  if name in desired_names or not bool(tool.is_active):
1046
1050
  continue
1047
1051
  tool.is_active = False
@@ -57,6 +57,8 @@ class PromptApiView(MethodView):
57
57
  meta["execution_mode"] = PromptService.execution_mode_for_agent_role(agent_role)
58
58
  meta["queue_tier"] = runtime_policy["queue_tier"]
59
59
  meta["context_policy"] = runtime_policy["context"]
60
+ meta["runtime_provider"] = runtime_policy["runtime_provider"]
61
+ meta["runtime_config"] = runtime_policy["runtime_config"]
60
62
 
61
63
  return jsonify({
62
64
  "meta": meta,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 2.47.2
3
+ Version: 2.49.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