iatoolkit 2.28.3__tar.gz → 2.29.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 (249) hide show
  1. {iatoolkit-2.28.3/src/iatoolkit.egg-info → iatoolkit-2.29.0}/PKG-INFO +1 -1
  2. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/__init__.py +1 -1
  3. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +3 -2
  4. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/runtime_logging.py +39 -6
  5. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/attachment_policy_service.py +22 -10
  6. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/query_service.py +3 -5
  7. {iatoolkit-2.28.3 → iatoolkit-2.29.0/src/iatoolkit.egg-info}/PKG-INFO +1 -1
  8. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/LICENSE +0 -0
  9. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/LICENSE_COMMUNITY.md +0 -0
  10. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/pyproject.toml +0 -0
  11. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/readme.md +0 -0
  12. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/requirements.txt +0 -0
  13. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/setup.cfg +0 -0
  14. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/base_company.py +0 -0
  15. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/cli_commands.py +0 -0
  16. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/common/__init__.py +0 -0
  17. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/common/exceptions.py +0 -0
  18. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/common/interfaces/__init__.py +0 -0
  19. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
  20. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
  21. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
  22. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
  23. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
  24. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
  25. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
  26. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/common/model_registry.py +0 -0
  27. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/common/routes.py +0 -0
  28. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/common/secret_resolver.py +0 -0
  29. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/common/session_manager.py +0 -0
  30. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/common/util.py +0 -0
  31. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/company_registry.py +0 -0
  32. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/__init__.py +0 -0
  33. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
  34. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
  35. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
  36. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
  37. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
  38. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
  39. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
  40. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
  41. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
  42. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
  43. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
  44. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
  45. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
  46. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
  47. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
  48. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
  49. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
  50. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
  51. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
  52. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
  53. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
  54. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
  55. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
  56. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
  57. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
  58. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
  59. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
  60. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
  61. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
  62. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/core.py +0 -0
  63. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/__init__.py +0 -0
  64. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
  65. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/call_service.py +0 -0
  66. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  67. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  68. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  69. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  70. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  71. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  72. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  73. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/google_auth_client.py +0 -0
  74. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/google_chat_app.py +0 -0
  75. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
  76. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/inference_handler.py +0 -0
  77. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
  78. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
  79. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
  80. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
  81. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
  82. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
  83. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
  84. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
  85. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/llm_proxy.py +0 -0
  86. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/llm_response.py +0 -0
  87. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  88. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/locales/en.yaml +0 -0
  89. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/locales/es.yaml +0 -0
  90. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/repositories/__init__.py +0 -0
  91. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/repositories/api_key_repo.py +0 -0
  92. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/repositories/database_manager.py +0 -0
  93. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/repositories/document_repo.py +0 -0
  94. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
  95. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
  96. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
  97. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
  98. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
  99. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/repositories/memory_repo.py +0 -0
  100. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/repositories/models.py +0 -0
  101. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/repositories/profile_repo.py +0 -0
  102. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
  103. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
  104. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
  105. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/repositories/vs_repo.py +0 -0
  106. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/__init__.py +0 -0
  107. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/api_key_service.py +0 -0
  108. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/auth_service.py +0 -0
  109. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/benchmark_service.py +0 -0
  110. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/branding_service.py +0 -0
  111. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/company_context_service.py +0 -0
  112. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/configuration_service.py +0 -0
  113. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/context_builder_service.py +0 -0
  114. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/dispatcher_service.py +0 -0
  115. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/embedding_service.py +0 -0
  116. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/excel_service.py +0 -0
  117. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/file_processor_service.py +0 -0
  118. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/history_manager_service.py +0 -0
  119. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/http_tool_service.py +0 -0
  120. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/i18n_service.py +0 -0
  121. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/inference_service.py +0 -0
  122. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/jwt_service.py +0 -0
  123. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/knowledge_base_service.py +0 -0
  124. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/language_service.py +0 -0
  125. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/license_service.py +0 -0
  126. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/llm_client_service.py +0 -0
  127. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/mail_service.py +0 -0
  128. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
  129. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/mcp_token_service.py +0 -0
  130. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/memory_compiler_service.py +0 -0
  131. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/memory_lint_service.py +0 -0
  132. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
  133. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/memory_service.py +0 -0
  134. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/memory_wiki_service.py +0 -0
  135. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
  136. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
  137. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/parsers/__init__.py +0 -0
  138. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/parsers/contracts.py +0 -0
  139. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
  140. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
  141. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
  142. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
  143. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
  144. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
  145. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
  146. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
  147. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/parsers/validator.py +0 -0
  148. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/pdf_service.py +0 -0
  149. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/profile_service.py +0 -0
  150. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/prompt_resource_service.py +0 -0
  151. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/prompt_service.py +0 -0
  152. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
  153. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/sql_dataset_service.py +0 -0
  154. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/sql_service.py +0 -0
  155. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/sql_source_service.py +0 -0
  156. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/storage_service.py +0 -0
  157. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/structured_output_service.py +0 -0
  158. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
  159. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/system_tools.py +0 -0
  160. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/telemetry_service.py +0 -0
  161. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
  162. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/tool_output_contract.py +0 -0
  163. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/tool_service.py +0 -0
  164. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/user_feedback_service.py +0 -0
  165. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/user_session_context_service.py +0 -0
  166. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/visual_kb_service.py +0 -0
  167. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/visual_tool_service.py +0 -0
  168. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/warmup_service.py +0 -0
  169. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/web_search/__init__.py +0 -0
  170. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
  171. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
  172. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
  173. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/services/web_search_service.py +0 -0
  174. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  175. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
  176. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
  177. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  178. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  179. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/js/chat_help_content.js +0 -0
  180. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  181. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  182. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/js/chat_main.js +0 -0
  183. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
  184. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
  185. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  186. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  187. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  188. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  189. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  190. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/styles/chat_public.css +0 -0
  191. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/styles/documents.css +0 -0
  192. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/styles/landing_page.css +0 -0
  193. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/styles/llm_output.css +0 -0
  194. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/static/styles/onboarding.css +0 -0
  195. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/_company_header.html +0 -0
  196. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/_login_widget.html +0 -0
  197. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/account.html +0 -0
  198. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/base.html +0 -0
  199. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/change_password.html +0 -0
  200. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/chat.html +0 -0
  201. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
  202. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/chat_modals.html +0 -0
  203. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/error.html +0 -0
  204. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/forgot_password.html +0 -0
  205. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/home_hosted_default.html +0 -0
  206. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
  207. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  208. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/pdf/base.html +0 -0
  209. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/pdf/letter.html +0 -0
  210. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/pdf/report.html +0 -0
  211. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/pdf/simple.html +0 -0
  212. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/templates/signup.html +0 -0
  213. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/__init__.py +0 -0
  214. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/account_view.py +0 -0
  215. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/api_key_api_view.py +0 -0
  216. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/base_login_view.py +0 -0
  217. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/categories_api_view.py +0 -0
  218. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/change_password_view.py +0 -0
  219. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
  220. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/chat_view.py +0 -0
  221. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/configuration_api_view.py +0 -0
  222. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/connectors_api_view.py +0 -0
  223. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/embedding_api_view.py +0 -0
  224. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/forgot_password_view.py +0 -0
  225. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/help_content_api_view.py +0 -0
  226. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/history_api_view.py +0 -0
  227. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/home_view.py +0 -0
  228. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/init_context_api_view.py +0 -0
  229. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  230. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/load_document_api_view.py +0 -0
  231. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/login_view.py +0 -0
  232. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/logout_api_view.py +0 -0
  233. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/memory_api_view.py +0 -0
  234. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/profile_api_view.py +0 -0
  235. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/prompt_api_view.py +0 -0
  236. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
  237. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
  238. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/rag_api_view.py +0 -0
  239. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/root_redirect_view.py +0 -0
  240. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/signup_view.py +0 -0
  241. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/static_page_view.py +0 -0
  242. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/tool_api_view.py +0 -0
  243. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  244. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/users_api_view.py +0 -0
  245. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit/views/verify_user_view.py +0 -0
  246. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
  247. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  248. {iatoolkit-2.28.3 → iatoolkit-2.29.0}/src/iatoolkit.egg-info/requires.txt +0 -0
  249. {iatoolkit-2.28.3 → iatoolkit-2.29.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.28.3
3
+ Version: 2.29.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.28.3"
6
+ __version__ = "2.29.0"
7
7
 
8
8
  # Expose main classes and functions at the top level of the package
9
9
 
@@ -85,7 +85,8 @@ class DeepseekAdapter(OpenAICompatibleChatAdapter):
85
85
  raise IAToolkitException(
86
86
  IAToolkitException.ErrorType.LLM_ERROR,
87
87
  (
88
- "DeepSeek API directa no soporta imagenes ni archivos nativos en este endpoint. "
89
- "Usa adjuntos extraidos a texto o un modelo/provider que publique soporte de image/file input."
88
+ "Este modelo/provider no expone visión ni archivos nativos por API en este endpoint: "
89
+ "DeepSeek API directa no acepta imagenes ni archivos nativos aqui. "
90
+ "Usa un modelo/provider que publique soporte API nativo de image/file input."
90
91
  ),
91
92
  )
@@ -75,15 +75,34 @@ def _ensure_stdout_handler(
75
75
  log_level: int,
76
76
  ) -> None:
77
77
  logger.setLevel(min(logger.level or log_level, log_level))
78
+ canonical_handler = None
79
+
78
80
  for handler in logger.handlers:
79
81
  if getattr(handler, "_iatoolkit_stdout_handler", False):
80
82
  handler.setFormatter(formatter)
81
- return
82
-
83
- handler = logging.StreamHandler(sys.stdout)
84
- handler.setFormatter(formatter)
85
- handler._iatoolkit_stdout_handler = True
86
- logger.addHandler(handler)
83
+ canonical_handler = handler
84
+ break
85
+
86
+ if canonical_handler is None:
87
+ for handler in logger.handlers:
88
+ if _is_root_stdio_handler(handler):
89
+ handler.setFormatter(formatter)
90
+ _set_handler_stream(handler, sys.stdout)
91
+ handler._iatoolkit_stdout_handler = True
92
+ canonical_handler = handler
93
+ break
94
+
95
+ if canonical_handler is None:
96
+ canonical_handler = logging.StreamHandler(sys.stdout)
97
+ canonical_handler.setFormatter(formatter)
98
+ canonical_handler._iatoolkit_stdout_handler = True
99
+ logger.addHandler(canonical_handler)
100
+
101
+ for handler in list(logger.handlers):
102
+ if handler is canonical_handler:
103
+ continue
104
+ if _is_root_stdio_handler(handler):
105
+ logger.removeHandler(handler)
87
106
 
88
107
 
89
108
  def _preserve_stdout_handler_across_basic_config(formatter: logging.Formatter) -> None:
@@ -105,6 +124,20 @@ def _preserve_stdout_handler_across_basic_config(formatter: logging.Formatter) -
105
124
  _BASIC_CONFIG_PATCHED = True
106
125
 
107
126
 
127
+ def _is_root_stdio_handler(handler: logging.Handler) -> bool:
128
+ if not isinstance(handler, logging.StreamHandler):
129
+ return False
130
+ stream = getattr(handler, "stream", None)
131
+ return stream in {sys.stdout, sys.stderr}
132
+
133
+
134
+ def _set_handler_stream(handler: logging.StreamHandler, stream) -> None:
135
+ try:
136
+ handler.setStream(stream)
137
+ except AttributeError:
138
+ handler.stream = stream
139
+
140
+
108
141
  def _runtime_log_level() -> int:
109
142
  raw_level = (os.getenv("LOG_LEVEL") or "INFO").strip().upper()
110
143
  level = getattr(logging, raw_level, None)
@@ -114,6 +114,7 @@ class AttachmentPolicyService:
114
114
  wants_native = self._wants_native(mode, meta, capabilities)
115
115
  wants_extract = self._wants_extract(mode, meta, capabilities)
116
116
  native_ok = False
117
+ native_blocked_by_model_catalog = False
117
118
 
118
119
  if wants_native:
119
120
  if str(provider or "").strip().lower() == "openrouter":
@@ -124,17 +125,22 @@ class AttachmentPolicyService:
124
125
  )
125
126
  openrouter_native_image_checked = True
126
127
  if openrouter_native_image_error:
127
- if openrouter_native_image_error not in errors:
128
- errors.append(openrouter_native_image_error)
129
- continue
130
- if bool(capabilities.get("supports_native_images")):
128
+ if fallback == self.FALLBACK_EXTRACT or wants_extract:
129
+ stats["fallback_to_extract"] += 1
130
+ wants_extract = True
131
+ native_blocked_by_model_catalog = True
132
+ else:
133
+ if openrouter_native_image_error not in errors:
134
+ errors.append(openrouter_native_image_error)
135
+ continue
136
+ if (not native_blocked_by_model_catalog) and bool(capabilities.get("supports_native_images")):
131
137
  files_for_context.append(dict(file_obj))
132
138
  native_ok = True
133
139
  stats["native_sent_count"] += 1
134
- elif fallback == self.FALLBACK_EXTRACT or wants_extract:
140
+ elif (not native_blocked_by_model_catalog) and (fallback == self.FALLBACK_EXTRACT or wants_extract):
135
141
  stats["fallback_to_extract"] += 1
136
142
  wants_extract = True
137
- else:
143
+ elif not native_blocked_by_model_catalog:
138
144
  errors.append(
139
145
  f"Image attachment '{filename}' cannot be sent as native image for provider '{provider}'."
140
146
  )
@@ -267,15 +273,19 @@ class AttachmentPolicyService:
267
273
  def _get_openrouter_native_image_error(self, company_short_name: str, model: str | None) -> str | None:
268
274
  model_id = str(model or "").strip()
269
275
  if not model_id:
270
- return "No se pudo validar soporte de imagen nativa en OpenRouter porque no se resolvio el modelo efectivo."
276
+ return (
277
+ "Este modelo/provider no expone visión nativa por API: no se resolvio el modelo efectivo "
278
+ "para OpenRouter, por lo que no puedo confirmar soporte de imagenes nativas."
279
+ )
271
280
 
272
281
  model_metadata, verified = self._lookup_openrouter_model_metadata(company_short_name, model_id)
273
282
  if not verified:
274
283
  return None
275
284
  if not isinstance(model_metadata, dict):
276
285
  return (
286
+ "Este modelo/provider no expone visión nativa por API verificable: "
277
287
  f"OpenRouter no publica metadata para el modelo '{model_id}', por lo que no puedo confirmar "
278
- "si acepta imagenes nativas."
288
+ "que acepte imagenes nativas."
279
289
  )
280
290
 
281
291
  architecture = model_metadata.get("architecture") or {}
@@ -291,8 +301,10 @@ class AttachmentPolicyService:
291
301
  published_model_id = str(model_metadata.get("id") or model_id).strip() or model_id
292
302
  published_modalities = ", ".join(input_modalities) if input_modalities else "(vacio)"
293
303
  return (
294
- f"El modelo de OpenRouter '{published_model_id}' no publica 'image' en 'input_modalities' "
295
- f"(publica: {published_modalities}), por lo que no puede recibir imagenes nativas."
304
+ "Este modelo/provider no expone visión nativa por API: "
305
+ f"OpenRouter publica el modelo '{published_model_id}' con input_modalities={published_modalities}, "
306
+ "sin 'image'. Para enviar imagenes nativas usa un modelo/provider que publique 'image' "
307
+ "como modalidad de entrada."
296
308
  )
297
309
 
298
310
  def _lookup_openrouter_model_metadata(self, company_short_name: str, model: str) -> tuple[dict | None, bool]:
@@ -201,14 +201,12 @@ class QueryService:
201
201
  company_short_name: str,
202
202
  model: Optional[str],
203
203
  prompt_output_contract: dict | None = None) -> str:
204
- # Priority: 1. Prompt model -> 2. Explicit model -> 3. Company config
205
- effective_model = None
206
- if isinstance(prompt_output_contract, dict):
204
+ # Priority: 1. Explicit model override -> 2. Prompt model -> 3. Company config
205
+ effective_model = str(model or "").strip() or None
206
+ if not effective_model and isinstance(prompt_output_contract, dict):
207
207
  prompt_model = str(prompt_output_contract.get("llm_model") or "").strip()
208
208
  if prompt_model:
209
209
  effective_model = prompt_model
210
- if not effective_model:
211
- effective_model = model
212
210
  if not effective_model:
213
211
  llm_config = self.configuration_service.get_configuration(company_short_name, 'llm')
214
212
  if llm_config and llm_config.get('model'):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 2.28.3
3
+ Version: 2.29.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