iatoolkit 2.51.3__tar.gz → 2.53.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. {iatoolkit-2.51.3/src/iatoolkit.egg-info → iatoolkit-2.53.0}/PKG-INFO +1 -1
  2. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/__init__.py +1 -1
  3. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/routes.py +7 -1
  4. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_tools_pack.yaml +3 -0
  5. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/locales/en.yaml +1 -0
  6. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/locales/es.yaml +1 -0
  7. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/repositories/models.py +25 -1
  8. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/configuration_service.py +6 -0
  9. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/dispatcher_service.py +39 -0
  10. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/llm_client_service.py +23 -2
  11. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/query_service.py +36 -2
  12. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/system_tools.py +9 -0
  13. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/tool_service.py +5 -0
  14. {iatoolkit-2.51.3 → iatoolkit-2.53.0/src/iatoolkit.egg-info}/PKG-INFO +1 -1
  15. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/LICENSE +0 -0
  16. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/LICENSE_COMMUNITY.md +0 -0
  17. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/pyproject.toml +0 -0
  18. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/readme.md +0 -0
  19. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/setup.cfg +0 -0
  20. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/base_company.py +0 -0
  21. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/cli_commands.py +0 -0
  22. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/__init__.py +0 -0
  23. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/bridge_validation.py +0 -0
  24. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/exceptions.py +0 -0
  25. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/interfaces/__init__.py +0 -0
  26. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
  27. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
  28. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
  29. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
  30. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
  31. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
  32. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
  33. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/model_registry.py +0 -0
  34. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/secret_resolver.py +0 -0
  35. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/session_manager.py +0 -0
  36. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/text_splitter.py +0 -0
  37. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/url_safety.py +0 -0
  38. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/common/util.py +0 -0
  39. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/company_registry.py +0 -0
  40. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/__init__.py +0 -0
  41. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
  42. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
  43. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
  44. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
  45. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
  46. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
  47. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
  48. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
  49. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
  50. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
  51. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
  52. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
  53. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
  54. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
  55. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
  56. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
  57. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
  58. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
  59. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
  60. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
  61. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
  62. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
  63. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
  64. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
  65. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
  66. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
  67. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
  68. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
  69. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/core.py +0 -0
  70. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/__init__.py +0 -0
  71. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
  72. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/call_service.py +0 -0
  73. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  74. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  75. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  76. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  77. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  78. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  79. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  80. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/google_auth_client.py +0 -0
  81. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/google_chat_app.py +0 -0
  82. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
  83. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/inference_handler.py +0 -0
  84. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
  85. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
  86. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
  87. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
  88. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
  89. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
  90. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
  91. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
  92. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
  93. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/llm_proxy.py +0 -0
  94. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/llm_response.py +0 -0
  95. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  96. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/repositories/__init__.py +0 -0
  97. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/repositories/api_key_repo.py +0 -0
  98. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/repositories/bridge_repo.py +0 -0
  99. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/repositories/database_manager.py +0 -0
  100. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/repositories/document_repo.py +0 -0
  101. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
  102. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
  103. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
  104. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
  105. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
  106. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/repositories/memory_repo.py +0 -0
  107. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/repositories/profile_repo.py +0 -0
  108. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
  109. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
  110. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
  111. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/repositories/vs_repo.py +0 -0
  112. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/runtime_logging.py +0 -0
  113. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/__init__.py +0 -0
  114. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/api_key_service.py +0 -0
  115. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/attachment_policy_service.py +0 -0
  116. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/auth_service.py +0 -0
  117. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/branding_service.py +0 -0
  118. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/company_context_service.py +0 -0
  119. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/context_builder_service.py +0 -0
  120. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/embedding_service.py +0 -0
  121. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/excel_service.py +0 -0
  122. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/file_processor_service.py +0 -0
  123. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/history_manager_service.py +0 -0
  124. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/http_tool_service.py +0 -0
  125. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/i18n_service.py +0 -0
  126. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/inference_service.py +0 -0
  127. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/jwt_service.py +0 -0
  128. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/knowledge_base_service.py +0 -0
  129. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/language_service.py +0 -0
  130. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/license_service.py +0 -0
  131. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/mail_service.py +0 -0
  132. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
  133. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/mcp_token_service.py +0 -0
  134. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/memory_compiler_service.py +0 -0
  135. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/memory_lint_service.py +0 -0
  136. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
  137. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/memory_service.py +0 -0
  138. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/memory_wiki_service.py +0 -0
  139. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
  140. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
  141. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/operator_identity_service.py +0 -0
  142. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/parsers/__init__.py +0 -0
  143. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/parsers/contracts.py +0 -0
  144. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
  145. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
  146. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
  147. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
  148. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
  149. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
  150. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
  151. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
  152. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/parsers/validator.py +0 -0
  153. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/pdf_service.py +0 -0
  154. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/profile_service.py +0 -0
  155. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/prompt_resource_service.py +0 -0
  156. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/prompt_service.py +0 -0
  157. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
  158. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/sql_dataset_service.py +0 -0
  159. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/sql_service.py +0 -0
  160. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/sql_source_service.py +0 -0
  161. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/storage_service.py +0 -0
  162. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/structured_output_service.py +0 -0
  163. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
  164. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/telemetry_service.py +0 -0
  165. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
  166. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/tool_output_contract.py +0 -0
  167. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/user_feedback_service.py +0 -0
  168. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/user_session_context_service.py +0 -0
  169. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/visual_kb_service.py +0 -0
  170. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/visual_tool_service.py +0 -0
  171. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/warmup_service.py +0 -0
  172. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/web_search/__init__.py +0 -0
  173. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
  174. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
  175. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
  176. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/services/web_search_service.py +0 -0
  177. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  178. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
  179. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
  180. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  181. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  182. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/js/chat_help_content.js +0 -0
  183. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  184. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  185. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/js/chat_main.js +0 -0
  186. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
  187. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
  188. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  189. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  190. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  191. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  192. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  193. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/styles/chat_public.css +0 -0
  194. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/styles/documents.css +0 -0
  195. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/styles/landing_page.css +0 -0
  196. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/styles/llm_output.css +0 -0
  197. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/static/styles/onboarding.css +0 -0
  198. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/_company_header.html +0 -0
  199. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/_login_widget.html +0 -0
  200. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/account.html +0 -0
  201. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/base.html +0 -0
  202. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/change_password.html +0 -0
  203. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/chat.html +0 -0
  204. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
  205. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/chat_modals.html +0 -0
  206. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/error.html +0 -0
  207. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/forgot_password.html +0 -0
  208. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/home_hosted_default.html +0 -0
  209. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
  210. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  211. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/pdf/base.html +0 -0
  212. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/pdf/letter.html +0 -0
  213. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/pdf/report.html +0 -0
  214. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/pdf/simple.html +0 -0
  215. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/templates/signup.html +0 -0
  216. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/__init__.py +0 -0
  217. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/account_view.py +0 -0
  218. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/api_key_api_view.py +0 -0
  219. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/base_login_view.py +0 -0
  220. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/categories_api_view.py +0 -0
  221. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/change_password_view.py +0 -0
  222. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
  223. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/chat_view.py +0 -0
  224. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/configuration_api_view.py +0 -0
  225. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/connectors_api_view.py +0 -0
  226. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/embedding_api_view.py +0 -0
  227. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/forgot_password_view.py +0 -0
  228. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/help_content_api_view.py +0 -0
  229. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/history_api_view.py +0 -0
  230. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/home_view.py +0 -0
  231. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/init_context_api_view.py +0 -0
  232. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  233. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/load_document_api_view.py +0 -0
  234. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/login_view.py +0 -0
  235. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/logout_api_view.py +0 -0
  236. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/memory_api_view.py +0 -0
  237. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/profile_api_view.py +0 -0
  238. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/prompt_api_view.py +0 -0
  239. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
  240. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
  241. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/rag_api_view.py +0 -0
  242. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/root_redirect_view.py +0 -0
  243. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/signup_view.py +0 -0
  244. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/static_page_view.py +0 -0
  245. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/tool_api_view.py +0 -0
  246. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  247. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/users_api_view.py +0 -0
  248. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit/views/verify_user_view.py +0 -0
  249. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
  250. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  251. {iatoolkit-2.51.3 → iatoolkit-2.53.0}/src/iatoolkit.egg-info/requires.txt +0 -0
  252. {iatoolkit-2.51.3 → iatoolkit-2.53.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.51.3
3
+ Version: 2.53.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.51.3"
6
+ __version__ = "2.53.0"
7
7
 
8
8
  # Expose main classes and functions at the top level of the package
9
9
 
@@ -299,7 +299,13 @@ def register_views(app):
299
299
  return redirect(signed_url)
300
300
 
301
301
  # Fallback path: stream bytes from storage through Flask.
302
- file_bytes = storage_service.get_document_content(company_short_name, storage_key)
302
+ try:
303
+ file_bytes = storage_service.get_document_content(company_short_name, storage_key)
304
+ except IAToolkitException as e:
305
+ if e.error_type != IAToolkitException.ErrorType.FILE_IO_ERROR:
306
+ raise
307
+ # Generated downloads are deleted after the tenant's retention.
308
+ abort(404, "This file has expired or is no longer available.")
303
309
  guessed_mime, _ = mimetypes.guess_type(output_filename)
304
310
  return send_file(
305
311
  BytesIO(file_bytes),
@@ -128,6 +128,9 @@ tools:
128
128
  - orientation
129
129
  - function_name: iat_send_email
130
130
  description: iatoolkit mail system. envia mails cuando un usuario lo solicita.
131
+ # Sends a real email: simulated, never sent, when an evaluation replays an agent.
132
+ execution_config:
133
+ side_effects: true
131
134
  routing_profile:
132
135
  tags:
133
136
  - email
@@ -1425,6 +1425,7 @@ ui:
1425
1425
  definitions_filter_summary: "Showing {visible} of {total} pipelines"
1426
1426
  definition_last_run: "Last run"
1427
1427
  definition_no_runs: "No runs"
1428
+ definition_column_id: "ID"
1428
1429
  definition_column_pipeline: "Pipeline"
1429
1430
  definition_column_input: "Input"
1430
1431
  definition_column_steps: "Steps"
@@ -1440,6 +1440,7 @@ ui:
1440
1440
  definitions_filter_summary: "Mostrando {visible} de {total} pipelines"
1441
1441
  definition_last_run: "Última ejecución"
1442
1442
  definition_no_runs: "Sin ejecuciones"
1443
+ definition_column_id: "ID"
1443
1444
  definition_column_pipeline: "Pipeline"
1444
1445
  definition_column_input: "Entrada"
1445
1446
  definition_column_steps: "Pasos"
@@ -9,7 +9,7 @@ from sqlalchemy import Column, Integer, BigInteger, String, DateTime, Enum, Text
9
9
  from sqlalchemy.orm import DeclarativeBase
10
10
  from sqlalchemy.orm import relationship, class_mapper
11
11
  from sqlalchemy.sql import func
12
- from sqlalchemy import UniqueConstraint
12
+ from sqlalchemy import UniqueConstraint, Index
13
13
  from sqlalchemy.dialects.postgresql import JSONB
14
14
  from datetime import datetime
15
15
  from pgvector.sqlalchemy import Vector
@@ -385,6 +385,17 @@ class Tool(Base):
385
385
 
386
386
  company = relationship('Company', back_populates='tools')
387
387
 
388
+ @property
389
+ def has_side_effects(self) -> bool:
390
+ """Whether calling this tool changes something outside the conversation.
391
+
392
+ Declared explicitly with `execution_config.side_effects: true`; tools
393
+ are read-only unless they say otherwise. Model evaluations replay real
394
+ executions and simulate these tools instead of running them.
395
+ """
396
+ config = self.execution_config if isinstance(self.execution_config, dict) else {}
397
+ return config.get("side_effects") is True
398
+
388
399
  def to_dict(self):
389
400
  return {column.key: getattr(self, column.key) for column in class_mapper(self.__class__).columns}
390
401
 
@@ -598,6 +609,19 @@ class LLMQuery(Base):
598
609
  created_at = Column(DateTime, default=datetime.now)
599
610
  task_id = Column(Integer, default=None, nullable=True)
600
611
 
612
+ # Execution trace: enough to replay an agent execution later (model
613
+ # evaluations). prompt_inputs are the caller's raw inputs, before they are
614
+ # merged with the user profile; input_files hold storage references only,
615
+ # never file content.
616
+ prompt_name = Column(String, nullable=True)
617
+ prompt_inputs = Column(JSON, nullable=True)
618
+ input_files = Column(JSON, nullable=True)
619
+ input_files_purged_at = Column(DateTime, nullable=True)
620
+
621
+ __table_args__ = (
622
+ Index('ix_iat_queries_company_prompt_created', 'company_id', 'prompt_name', 'created_at'),
623
+ )
624
+
601
625
  company = relationship("Company", back_populates="llm_queries")
602
626
 
603
627
  def to_dict(self):
@@ -790,6 +790,12 @@ class ConfigurationService:
790
790
  add_error(f"tools[{i}]", "Missing required key: 'description'")
791
791
  if not isinstance(tool.get("params"), dict):
792
792
  add_error(f"tools[{i}]", "'params' key must be a dictionary.")
793
+ execution_config = tool.get("execution_config")
794
+ if execution_config is not None:
795
+ if not isinstance(execution_config, dict):
796
+ add_error(f"tools[{i}].execution_config", "Must be a dictionary.")
797
+ elif "side_effects" in execution_config and not isinstance(execution_config["side_effects"], bool):
798
+ add_error(f"tools[{i}].execution_config.side_effects", "Must be true or false.")
793
799
 
794
800
  # 6. Prompts
795
801
  prompt_list, categories_config = self._get_prompt_config(config)
@@ -14,6 +14,11 @@ from time import perf_counter
14
14
  from uuid import uuid4
15
15
 
16
16
 
17
+ #: request_source of the executions a model evaluation replays. Tools that
18
+ #: declare side effects are simulated for them instead of being run.
19
+ EVALUATION_REQUEST_SOURCE = "evaluation"
20
+
21
+
17
22
  class Dispatcher:
18
23
  # System tools whose answer depends on who is asking, so the dispatcher
19
24
  # injects the identity server-side. The wiki tools are here because a page's
@@ -157,6 +162,22 @@ class Dispatcher:
157
162
  arguments=dict(kwargs),
158
163
  )
159
164
  started_at = perf_counter()
165
+ if self._is_simulated_call(tool_def, _iat_runtime_source):
166
+ result = self._simulated_result(function_name)
167
+ self._notify_tool_execution_hook(
168
+ "after_dispatch",
169
+ execution_id=execution_id,
170
+ company_short_name=company_short_name,
171
+ function_name=function_name,
172
+ user_identifier=user_identifier,
173
+ runtime_source=_iat_runtime_source,
174
+ tool_def=tool_def,
175
+ arguments=dict(kwargs),
176
+ status="simulated",
177
+ duration_ms=int(round((perf_counter() - started_at) * 1000)),
178
+ result=result,
179
+ )
180
+ return result
160
181
  try:
161
182
  result = self._dispatch_resolved_tool(
162
183
  company_short_name=company_short_name,
@@ -195,6 +216,24 @@ class Dispatcher:
195
216
  )
196
217
  raise
197
218
 
219
+ @staticmethod
220
+ def _is_simulated_call(tool_def, runtime_source: str | None) -> bool:
221
+ if str(runtime_source or "").strip().lower() != EVALUATION_REQUEST_SOURCE:
222
+ return False
223
+ return bool(getattr(tool_def, "has_side_effects", False))
224
+
225
+ @staticmethod
226
+ def _simulated_result(function_name: str) -> dict:
227
+ # Returned to the model in place of the real call, so the agent can keep
228
+ # going: the evaluation measures its reasoning, not this action's outcome.
229
+ return {
230
+ "status": "simulated",
231
+ "message": (
232
+ f"Action '{function_name}' was not executed: this is a model evaluation "
233
+ "and the tool has side effects. Continue as if it had succeeded."
234
+ ),
235
+ }
236
+
198
237
  def _dispatch_resolved_tool(
199
238
  self,
200
239
  *,
@@ -131,7 +131,8 @@ class llmClient:
131
131
  execution_metadata: Optional[Dict[str, Any]] = None,
132
132
  request_metadata: Optional[Dict[str, str]] = None,
133
133
  telemetry_request: Optional[Dict[str, Any]] = None,
134
- response_contract: Optional[Dict[str, Any]] = None
134
+ response_contract: Optional[Dict[str, Any]] = None,
135
+ execution_trace: Optional[Dict[str, Any]] = None
135
136
  ) -> dict:
136
137
 
137
138
  self._assert_runtime_not_suspended(company)
@@ -426,7 +427,8 @@ class llmClient:
426
427
  response=self.serialize_response(response, decoded_response),
427
428
  function_calls=f_calls,
428
429
  stats=combined_stats,
429
- answer_time=stats['response_time']
430
+ answer_time=stats['response_time'],
431
+ **self._execution_trace_columns(execution_trace)
430
432
  )
431
433
  self.llmquery_repo.add_query(query)
432
434
  telemetry_execution.finalize(
@@ -503,6 +505,7 @@ class llmClient:
503
505
  response={},
504
506
  valid_response=False,
505
507
  function_calls=f_calls,
508
+ **self._execution_trace_columns(execution_trace)
506
509
  )
507
510
  self.llmquery_repo.add_query(query)
508
511
  telemetry_execution.finalize(
@@ -1324,6 +1327,24 @@ class llmClient:
1324
1327
  stats_dict["provider_calls"] = provider_calls
1325
1328
  return stats_dict
1326
1329
 
1330
+ @staticmethod
1331
+ def _execution_trace_columns(execution_trace: Optional[Dict[str, Any]]) -> dict:
1332
+ """Maps the caller's execution trace onto the LLMQuery trace columns."""
1333
+ if not isinstance(execution_trace, dict):
1334
+ return {}
1335
+
1336
+ columns = {}
1337
+ prompt_name = str(execution_trace.get("prompt_name") or "").strip()
1338
+ if prompt_name:
1339
+ columns["prompt_name"] = prompt_name
1340
+ prompt_inputs = execution_trace.get("prompt_inputs")
1341
+ if isinstance(prompt_inputs, dict):
1342
+ columns["prompt_inputs"] = prompt_inputs
1343
+ input_files = execution_trace.get("input_files")
1344
+ if isinstance(input_files, list) and input_files:
1345
+ columns["input_files"] = input_files
1346
+ return columns
1347
+
1327
1348
  @classmethod
1328
1349
  def _compact_execution_metadata_for_stats(cls, key: str, value):
1329
1350
  if key == "tool_router":
@@ -963,6 +963,30 @@ class QueryService:
963
963
  return False
964
964
  return any(marker in error_text for marker in cls._PREVIOUS_RESPONSE_NOT_FOUND_MARKERS)
965
965
 
966
+ @staticmethod
967
+ def build_execution_trace(*,
968
+ prompt_name: str | None,
969
+ client_data: dict | None,
970
+ input_files: list | None) -> dict:
971
+ """
972
+ What an agent execution needs to be replayed later. Inputs are taken
973
+ as the caller sent them, before build_user_turn_prompt merges them with
974
+ the user profile; keys starting with "_" are internal plumbing.
975
+ """
976
+ trace = {}
977
+ normalized_prompt_name = str(prompt_name or "").strip()
978
+ if normalized_prompt_name:
979
+ trace["prompt_name"] = normalized_prompt_name
980
+ safe_client_data = client_data if isinstance(client_data, dict) else {}
981
+ trace["prompt_inputs"] = {
982
+ key: value
983
+ for key, value in safe_client_data.items()
984
+ if not str(key or "").startswith("_")
985
+ }
986
+ if isinstance(input_files, list) and input_files:
987
+ trace["input_files"] = [dict(item) for item in input_files if isinstance(item, dict)]
988
+ return trace
989
+
966
990
  def _invoke_with_history_recovery(self,
967
991
  *,
968
992
  company,
@@ -984,7 +1008,8 @@ class QueryService:
984
1008
  telemetry_request: dict | None,
985
1009
  prompt_output_contract: dict,
986
1010
  history_handle: HistoryHandle,
987
- ignore_history: bool) -> tuple[dict, HistoryHandle]:
1011
+ ignore_history: bool,
1012
+ execution_trace: dict | None = None) -> tuple[dict, HistoryHandle]:
988
1013
  previous_response_id = history_handle.request_params.get('previous_response_id')
989
1014
  context_history = history_handle.request_params.get('context_history')
990
1015
 
@@ -1009,6 +1034,7 @@ class QueryService:
1009
1034
  request_metadata=request_metadata,
1010
1035
  telemetry_request=telemetry_request,
1011
1036
  response_contract=prompt_output_contract if prompt_output_contract.get("schema") else None,
1037
+ execution_trace=execution_trace,
1012
1038
  )
1013
1039
  return response, history_handle
1014
1040
  except Exception as invoke_error:
@@ -1067,6 +1093,7 @@ class QueryService:
1067
1093
  request_metadata=request_metadata,
1068
1094
  telemetry_request=telemetry_request,
1069
1095
  response_contract=prompt_output_contract if prompt_output_contract.get("schema") else None,
1096
+ execution_trace=execution_trace,
1070
1097
  )
1071
1098
  return response, retry_history_handle
1072
1099
 
@@ -1377,10 +1404,16 @@ class QueryService:
1377
1404
  client_data: dict = {},
1378
1405
  task_id: Optional[int] = None,
1379
1406
  ignore_history: bool = False,
1380
- files: list = []
1407
+ files: list = [],
1408
+ input_files: list | None = None
1381
1409
  ) -> dict:
1382
1410
  try:
1383
1411
  stage_started_at = time.time()
1412
+ execution_trace = self.build_execution_trace(
1413
+ prompt_name=prompt_name,
1414
+ client_data=client_data,
1415
+ input_files=input_files,
1416
+ )
1384
1417
  request_source = None
1385
1418
 
1386
1419
  logging.debug(
@@ -1742,6 +1775,7 @@ class QueryService:
1742
1775
  prompt_output_contract=prompt_output_contract,
1743
1776
  history_handle=history_handle,
1744
1777
  ignore_history=ignore_history,
1778
+ execution_trace=execution_trace,
1745
1779
  )
1746
1780
  log_stage("invoke_with_history_recovery")
1747
1781
 
@@ -56,6 +56,13 @@ def _validate_system_tool_entry(entry: dict, index: int) -> dict:
56
56
  routing_profile = entry.get("routing_profile")
57
57
  normalized_routing_profile = _validate_routing_profile(routing_profile, index)
58
58
 
59
+ execution_config = entry.get("execution_config")
60
+ if execution_config is not None:
61
+ if not isinstance(execution_config, dict):
62
+ raise ValueError(f"tools[{index}].execution_config must be an object")
63
+ if "side_effects" in execution_config and not isinstance(execution_config["side_effects"], bool):
64
+ raise ValueError(f"tools[{index}].execution_config.side_effects must be a boolean")
65
+
59
66
  normalized = {
60
67
  "function_name": function_name,
61
68
  "description": description,
@@ -67,6 +74,8 @@ def _validate_system_tool_entry(entry: dict, index: int) -> dict:
67
74
  normalized["routing"] = normalized_routing
68
75
  if normalized_routing_profile is not None:
69
76
  normalized["routing_profile"] = normalized_routing_profile
77
+ if execution_config is not None:
78
+ normalized["execution_config"] = copy.deepcopy(execution_config)
70
79
  return normalized
71
80
 
72
81
 
@@ -4,6 +4,7 @@
4
4
  # IAToolkit is open source software.
5
5
 
6
6
  from injector import inject
7
+ import copy
7
8
  import os
8
9
  import json
9
10
  import logging
@@ -930,6 +931,7 @@ class ToolService:
930
931
  name=function['function_name'],
931
932
  description=function['description'],
932
933
  parameters=function['parameters'],
934
+ execution_config=copy.deepcopy(function.get("execution_config")),
933
935
  output_contract=clone_output_contract(function.get("output_contract")),
934
936
  tool_type=Tool.TYPE_SYSTEM,
935
937
  source=Tool.SOURCE_SYSTEM,
@@ -972,6 +974,7 @@ class ToolService:
972
974
  and tool.description == definition.get("description")
973
975
  and (tool.parameters or {}) == (definition.get("parameters") or {})
974
976
  and (tool.output_contract or {}) == (definition.get("output_contract") or {})
977
+ and (tool.execution_config or {}) == (definition.get("execution_config") or {})
975
978
  )
976
979
 
977
980
  def _system_tools_catalog_has_drift(
@@ -1032,6 +1035,7 @@ class ToolService:
1032
1035
  name=function_name,
1033
1036
  description=function.get("description"),
1034
1037
  parameters=function.get("parameters") or {},
1038
+ execution_config=copy.deepcopy(function.get("execution_config")),
1035
1039
  output_contract=clone_output_contract(function.get("output_contract")),
1036
1040
  tool_type=Tool.TYPE_SYSTEM,
1037
1041
  source=Tool.SOURCE_SYSTEM,
@@ -1128,6 +1132,7 @@ class ToolService:
1128
1132
  name=name,
1129
1133
  description=tool_data['description'],
1130
1134
  parameters=tool_data['params'],
1135
+ execution_config=copy.deepcopy(tool_data.get('execution_config')),
1131
1136
  output_contract=clone_output_contract(tool_data.get('output_contract')),
1132
1137
 
1133
1138
  tool_type=Tool.TYPE_NATIVE,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 2.51.3
3
+ Version: 2.53.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