iatoolkit 2.28.2__tar.gz → 2.28.3__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.2/src/iatoolkit.egg-info → iatoolkit-2.28.3}/PKG-INFO +1 -1
  2. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/__init__.py +1 -1
  3. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/common/model_registry.py +1 -14
  4. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +16 -0
  5. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/attachment_policy_service.py +111 -11
  6. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/query_service.py +1 -7
  7. {iatoolkit-2.28.2 → iatoolkit-2.28.3/src/iatoolkit.egg-info}/PKG-INFO +1 -1
  8. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/LICENSE +0 -0
  9. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/LICENSE_COMMUNITY.md +0 -0
  10. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/pyproject.toml +0 -0
  11. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/readme.md +0 -0
  12. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/requirements.txt +0 -0
  13. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/setup.cfg +0 -0
  14. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/base_company.py +0 -0
  15. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/cli_commands.py +0 -0
  16. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/common/__init__.py +0 -0
  17. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/common/exceptions.py +0 -0
  18. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/common/interfaces/__init__.py +0 -0
  19. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
  20. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
  21. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
  22. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
  23. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
  24. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
  25. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
  26. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/common/routes.py +0 -0
  27. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/common/secret_resolver.py +0 -0
  28. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/common/session_manager.py +0 -0
  29. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/common/util.py +0 -0
  30. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/company_registry.py +0 -0
  31. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/__init__.py +0 -0
  32. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
  33. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
  34. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
  35. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
  36. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
  37. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
  38. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
  39. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
  40. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
  41. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
  42. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
  43. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
  44. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
  45. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
  46. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
  47. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
  48. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
  49. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
  50. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
  51. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
  52. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
  53. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
  54. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
  55. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
  56. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
  57. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
  58. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
  59. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
  60. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
  61. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/core.py +0 -0
  62. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/__init__.py +0 -0
  63. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
  64. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/call_service.py +0 -0
  65. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  66. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  67. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  68. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  69. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  70. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  71. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  72. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/google_auth_client.py +0 -0
  73. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/google_chat_app.py +0 -0
  74. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
  75. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/inference_handler.py +0 -0
  76. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
  77. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
  78. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
  79. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
  80. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
  81. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
  82. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
  83. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
  84. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_proxy.py +0 -0
  85. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_response.py +0 -0
  86. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  87. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/locales/en.yaml +0 -0
  88. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/locales/es.yaml +0 -0
  89. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/repositories/__init__.py +0 -0
  90. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/repositories/api_key_repo.py +0 -0
  91. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/repositories/database_manager.py +0 -0
  92. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/repositories/document_repo.py +0 -0
  93. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
  94. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
  95. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
  96. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
  97. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
  98. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/repositories/memory_repo.py +0 -0
  99. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/repositories/models.py +0 -0
  100. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/repositories/profile_repo.py +0 -0
  101. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
  102. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
  103. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
  104. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/repositories/vs_repo.py +0 -0
  105. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/runtime_logging.py +0 -0
  106. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/__init__.py +0 -0
  107. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/api_key_service.py +0 -0
  108. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/auth_service.py +0 -0
  109. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/benchmark_service.py +0 -0
  110. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/branding_service.py +0 -0
  111. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/company_context_service.py +0 -0
  112. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/configuration_service.py +0 -0
  113. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/context_builder_service.py +0 -0
  114. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/dispatcher_service.py +0 -0
  115. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/embedding_service.py +0 -0
  116. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/excel_service.py +0 -0
  117. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/file_processor_service.py +0 -0
  118. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/history_manager_service.py +0 -0
  119. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/http_tool_service.py +0 -0
  120. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/i18n_service.py +0 -0
  121. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/inference_service.py +0 -0
  122. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/jwt_service.py +0 -0
  123. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/knowledge_base_service.py +0 -0
  124. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/language_service.py +0 -0
  125. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/license_service.py +0 -0
  126. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/llm_client_service.py +0 -0
  127. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/mail_service.py +0 -0
  128. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
  129. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/mcp_token_service.py +0 -0
  130. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/memory_compiler_service.py +0 -0
  131. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/memory_lint_service.py +0 -0
  132. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
  133. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/memory_service.py +0 -0
  134. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/memory_wiki_service.py +0 -0
  135. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
  136. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
  137. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/__init__.py +0 -0
  138. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/contracts.py +0 -0
  139. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
  140. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
  141. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
  142. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
  143. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
  144. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
  145. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
  146. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
  147. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/validator.py +0 -0
  148. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/pdf_service.py +0 -0
  149. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/profile_service.py +0 -0
  150. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/prompt_resource_service.py +0 -0
  151. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/prompt_service.py +0 -0
  152. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
  153. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/sql_dataset_service.py +0 -0
  154. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/sql_service.py +0 -0
  155. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/sql_source_service.py +0 -0
  156. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/storage_service.py +0 -0
  157. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/structured_output_service.py +0 -0
  158. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
  159. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/system_tools.py +0 -0
  160. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/telemetry_service.py +0 -0
  161. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
  162. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/tool_output_contract.py +0 -0
  163. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/tool_service.py +0 -0
  164. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/user_feedback_service.py +0 -0
  165. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/user_session_context_service.py +0 -0
  166. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/visual_kb_service.py +0 -0
  167. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/visual_tool_service.py +0 -0
  168. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/warmup_service.py +0 -0
  169. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/web_search/__init__.py +0 -0
  170. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
  171. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
  172. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
  173. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/services/web_search_service.py +0 -0
  174. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  175. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
  176. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
  177. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  178. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  179. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_help_content.js +0 -0
  180. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  181. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  182. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_main.js +0 -0
  183. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
  184. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
  185. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  186. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  187. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  188. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  189. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  190. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/styles/chat_public.css +0 -0
  191. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/styles/documents.css +0 -0
  192. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/styles/landing_page.css +0 -0
  193. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/styles/llm_output.css +0 -0
  194. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/static/styles/onboarding.css +0 -0
  195. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/_company_header.html +0 -0
  196. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/_login_widget.html +0 -0
  197. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/account.html +0 -0
  198. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/base.html +0 -0
  199. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/change_password.html +0 -0
  200. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/chat.html +0 -0
  201. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
  202. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/chat_modals.html +0 -0
  203. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/error.html +0 -0
  204. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/forgot_password.html +0 -0
  205. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/home_hosted_default.html +0 -0
  206. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
  207. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  208. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/pdf/base.html +0 -0
  209. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/pdf/letter.html +0 -0
  210. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/pdf/report.html +0 -0
  211. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/pdf/simple.html +0 -0
  212. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/templates/signup.html +0 -0
  213. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/__init__.py +0 -0
  214. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/account_view.py +0 -0
  215. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/api_key_api_view.py +0 -0
  216. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/base_login_view.py +0 -0
  217. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/categories_api_view.py +0 -0
  218. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/change_password_view.py +0 -0
  219. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
  220. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/chat_view.py +0 -0
  221. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/configuration_api_view.py +0 -0
  222. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/connectors_api_view.py +0 -0
  223. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/embedding_api_view.py +0 -0
  224. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/forgot_password_view.py +0 -0
  225. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/help_content_api_view.py +0 -0
  226. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/history_api_view.py +0 -0
  227. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/home_view.py +0 -0
  228. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/init_context_api_view.py +0 -0
  229. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  230. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/load_document_api_view.py +0 -0
  231. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/login_view.py +0 -0
  232. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/logout_api_view.py +0 -0
  233. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/memory_api_view.py +0 -0
  234. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/profile_api_view.py +0 -0
  235. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/prompt_api_view.py +0 -0
  236. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
  237. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
  238. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/rag_api_view.py +0 -0
  239. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/root_redirect_view.py +0 -0
  240. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/signup_view.py +0 -0
  241. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/static_page_view.py +0 -0
  242. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/tool_api_view.py +0 -0
  243. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  244. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/users_api_view.py +0 -0
  245. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit/views/verify_user_view.py +0 -0
  246. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
  247. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  248. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/src/iatoolkit.egg-info/requires.txt +0 -0
  249. {iatoolkit-2.28.2 → iatoolkit-2.28.3}/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.2
3
+ Version: 2.28.3
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.2"
6
+ __version__ = "2.28.3"
7
7
 
8
8
  # Expose main classes and functions at the top level of the package
9
9
 
@@ -100,9 +100,8 @@ class ModelRegistry:
100
100
  }
101
101
  supports_text_verbosity = normalized_provider in {"openai", "xai", "openrouter"}
102
102
  supports_store = normalized_provider in {"openai", "xai"}
103
- supports_native_images = self._resolve_native_image_support(normalized_provider)
104
103
 
105
- capabilities = {
104
+ return {
106
105
  "provider": normalized_provider,
107
106
  "history_type": self.get_history_type(model),
108
107
  "supports_reasoning_effort": supports_reasoning_effort,
@@ -111,9 +110,6 @@ class ModelRegistry:
111
110
  "allowed_text_verbosity": list(self._text_verbosity_options) if supports_text_verbosity else [],
112
111
  "supports_store": supports_store,
113
112
  }
114
- if supports_native_images is not None:
115
- capabilities["supports_native_images"] = supports_native_images
116
- return capabilities
117
113
 
118
114
  def get_request_defaults(self, model: str) -> dict:
119
115
  """
@@ -195,12 +191,3 @@ class ModelRegistry:
195
191
 
196
192
  def is_anthropic_model(self, model: str) -> bool:
197
193
  return self.get_provider(model) == "anthropic"
198
-
199
- @staticmethod
200
- def _resolve_native_image_support(provider: ProviderType) -> bool | None:
201
- # Keep this conservative and only publish a hint when we know the family behavior.
202
- if provider in {"openai", "gemini", "anthropic"}:
203
- return True
204
- if provider == "deepseek":
205
- return False
206
- return None
@@ -31,6 +31,7 @@ class DeepseekAdapter(OpenAICompatibleChatAdapter):
31
31
 
32
32
  def create_response(self, model: str, input: list[dict], **kwargs):
33
33
  self._validate_model(model)
34
+ self._validate_multimodal_inputs(kwargs)
34
35
  return super().create_response(model=model, input=input, **kwargs)
35
36
 
36
37
  @classmethod
@@ -73,3 +74,18 @@ class DeepseekAdapter(OpenAICompatibleChatAdapter):
73
74
  # Keep the default deterministic: unless a prompt explicitly asks for
74
75
  # reasoning, use non-thinking mode.
75
76
  return {"type": "disabled"}
77
+
78
+ @staticmethod
79
+ def _validate_multimodal_inputs(kwargs: dict) -> None:
80
+ images = kwargs.get("images") or []
81
+ attachments = kwargs.get("attachments") or []
82
+ if not images and not attachments:
83
+ return
84
+
85
+ raise IAToolkitException(
86
+ IAToolkitException.ErrorType.LLM_ERROR,
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."
90
+ ),
91
+ )
@@ -10,6 +10,10 @@ from typing import Any, Dict, List
10
10
  import base64
11
11
  import logging
12
12
  import mimetypes
13
+ import threading
14
+ import time
15
+
16
+ import requests
13
17
 
14
18
  from injector import inject
15
19
 
@@ -26,12 +30,16 @@ class AttachmentPolicyService:
26
30
 
27
31
  DEFAULT_MODE = MODE_EXTRACTED_ONLY
28
32
  DEFAULT_FALLBACK = FALLBACK_EXTRACT
33
+ OPENROUTER_MODELS_CACHE_TTL_SECONDS = 300
34
+ OPENROUTER_MODELS_TIMEOUT_SECONDS = 8
29
35
 
30
36
  @inject
31
37
  def __init__(self, configuration_service: ConfigurationService, util: Utility):
32
38
  self.configuration_service = configuration_service
33
39
  self.util = util
34
40
  self._default_capabilities: dict | None = None
41
+ self._openrouter_models_cache: dict[str, dict[str, Any]] = {}
42
+ self._openrouter_models_cache_lock = threading.Lock()
35
43
  self._default_capabilities_path = (
36
44
  Path(__file__).resolve().parent.parent / "config" / "llm_capabilities.yaml"
37
45
  )
@@ -60,12 +68,11 @@ class AttachmentPolicyService:
60
68
  provider: str,
61
69
  files: list | None,
62
70
  policy: dict | None = None,
63
- model_capabilities: dict | None = None,
71
+ model: str | None = None,
64
72
  ) -> dict:
65
73
  mode = self.normalize_mode((policy or {}).get("attachment_mode"))
66
74
  fallback = self.normalize_fallback((policy or {}).get("attachment_fallback"))
67
75
  capabilities = self.get_effective_provider_capabilities(company_short_name, provider)
68
- capabilities = self._apply_model_capability_hints(capabilities, model_capabilities)
69
76
 
70
77
  if not files:
71
78
  return {
@@ -95,6 +102,8 @@ class AttachmentPolicyService:
95
102
  "fallback_to_extract": 0,
96
103
  "errors": 0,
97
104
  }
105
+ openrouter_native_image_error: str | None = None
106
+ openrouter_native_image_checked = False
98
107
 
99
108
  for file_obj in files:
100
109
  stats["total_files"] += 1
@@ -107,6 +116,17 @@ class AttachmentPolicyService:
107
116
  native_ok = False
108
117
 
109
118
  if wants_native:
119
+ if str(provider or "").strip().lower() == "openrouter":
120
+ if not openrouter_native_image_checked:
121
+ openrouter_native_image_error = self._get_openrouter_native_image_error(
122
+ company_short_name=company_short_name,
123
+ model=model,
124
+ )
125
+ openrouter_native_image_checked = True
126
+ if openrouter_native_image_error:
127
+ if openrouter_native_image_error not in errors:
128
+ errors.append(openrouter_native_image_error)
129
+ continue
110
130
  if bool(capabilities.get("supports_native_images")):
111
131
  files_for_context.append(dict(file_obj))
112
132
  native_ok = True
@@ -244,17 +264,97 @@ class AttachmentPolicyService:
244
264
  merged.setdefault("max_files_per_request", 0)
245
265
  return merged
246
266
 
247
- @staticmethod
248
- def _apply_model_capability_hints(capabilities: dict, model_capabilities: dict | None) -> dict:
249
- merged = dict(capabilities or {})
250
- if not isinstance(model_capabilities, dict):
251
- return merged
267
+ def _get_openrouter_native_image_error(self, company_short_name: str, model: str | None) -> str | None:
268
+ model_id = str(model or "").strip()
269
+ if not model_id:
270
+ return "No se pudo validar soporte de imagen nativa en OpenRouter porque no se resolvio el modelo efectivo."
271
+
272
+ model_metadata, verified = self._lookup_openrouter_model_metadata(company_short_name, model_id)
273
+ if not verified:
274
+ return None
275
+ if not isinstance(model_metadata, dict):
276
+ return (
277
+ f"OpenRouter no publica metadata para el modelo '{model_id}', por lo que no puedo confirmar "
278
+ "si acepta imagenes nativas."
279
+ )
280
+
281
+ architecture = model_metadata.get("architecture") or {}
282
+ raw_input_modalities = architecture.get("input_modalities") or []
283
+ input_modalities = [
284
+ str(modality or "").strip().lower()
285
+ for modality in raw_input_modalities
286
+ if str(modality or "").strip()
287
+ ]
288
+ if "image" in input_modalities:
289
+ return None
290
+
291
+ published_model_id = str(model_metadata.get("id") or model_id).strip() or model_id
292
+ published_modalities = ", ".join(input_modalities) if input_modalities else "(vacio)"
293
+ 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."
296
+ )
252
297
 
253
- model_supports_native_images = model_capabilities.get("supports_native_images")
254
- if isinstance(model_supports_native_images, bool):
255
- merged["supports_native_images"] = bool(merged.get("supports_native_images")) and model_supports_native_images
298
+ def _lookup_openrouter_model_metadata(self, company_short_name: str, model: str) -> tuple[dict | None, bool]:
299
+ provider_config = self.configuration_service.get_llm_provider_config(company_short_name, "openrouter") or {}
300
+ base_url = str(provider_config.get("base_url") or "https://openrouter.ai/api/v1").strip()
301
+ models_url = f"{base_url.rstrip('/')}/models"
302
+ catalog = self._get_openrouter_models_catalog(models_url)
303
+ if catalog is None:
304
+ return None, False
305
+
306
+ model_key = str(model or "").strip().lower()
307
+ for item in catalog:
308
+ if not isinstance(item, dict):
309
+ continue
310
+ candidates = {
311
+ str(item.get("id") or "").strip().lower(),
312
+ str(item.get("canonical_slug") or "").strip().lower(),
313
+ }
314
+ candidates.update(
315
+ {
316
+ candidate.split("/")[-1]
317
+ for candidate in list(candidates)
318
+ if candidate and "/" in candidate
319
+ }
320
+ )
321
+ if model_key and model_key in candidates:
322
+ return item, True
323
+
324
+ return None, True
325
+
326
+ def _get_openrouter_models_catalog(self, models_url: str) -> list[dict] | None:
327
+ current_time = time.time()
328
+ with self._openrouter_models_cache_lock:
329
+ cached_entry = self._openrouter_models_cache.get(models_url)
330
+ if cached_entry and (current_time - float(cached_entry.get("fetched_at") or 0)) < self.OPENROUTER_MODELS_CACHE_TTL_SECONDS:
331
+ cached_data = cached_entry.get("data")
332
+ if isinstance(cached_data, list):
333
+ return cached_data
256
334
 
257
- return merged
335
+ try:
336
+ response = requests.get(
337
+ models_url,
338
+ params={"output_modalities": "all"},
339
+ timeout=self.OPENROUTER_MODELS_TIMEOUT_SECONDS,
340
+ headers={"User-Agent": "IAToolkit AttachmentPolicy/1.0"},
341
+ )
342
+ response.raise_for_status()
343
+ payload = response.json()
344
+ catalog = payload.get("data") if isinstance(payload, dict) else None
345
+ if not isinstance(catalog, list):
346
+ logging.warning("OpenRouter models API returned an unexpected payload shape for '%s'.", models_url)
347
+ return None
348
+ except Exception as exc:
349
+ logging.warning("Could not fetch OpenRouter model metadata from '%s': %s", models_url, exc)
350
+ return None
351
+
352
+ with self._openrouter_models_cache_lock:
353
+ self._openrouter_models_cache[models_url] = {
354
+ "fetched_at": current_time,
355
+ "data": catalog,
356
+ }
357
+ return catalog
258
358
 
259
359
  def _normalize_file_meta(self, file_obj: dict) -> dict:
260
360
  if not isinstance(file_obj, dict):
@@ -1422,18 +1422,12 @@ class QueryService:
1422
1422
  },
1423
1423
  }
1424
1424
  if self.attachment_policy_service:
1425
- get_capabilities_fn = getattr(self.model_registry, "get_capabilities", None)
1426
- model_capabilities = (
1427
- get_capabilities_fn(effective_model)
1428
- if callable(get_capabilities_fn)
1429
- else None
1430
- )
1431
1425
  attachment_plan = self.attachment_policy_service.build_attachment_plan(
1432
1426
  company_short_name=company_short_name,
1433
1427
  provider=provider,
1434
1428
  files=files or [],
1435
1429
  policy=effective_attachment_policy,
1436
- model_capabilities=model_capabilities,
1430
+ model=effective_model,
1437
1431
  )
1438
1432
  log_stage("attachment_plan")
1439
1433
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 2.28.2
3
+ Version: 2.28.3
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