iatoolkit 2.28.1__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.1/src/iatoolkit.egg-info → iatoolkit-2.28.3}/PKG-INFO +1 -1
  2. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/__init__.py +1 -1
  3. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +16 -0
  4. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/attachment_policy_service.py +114 -0
  5. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/query_service.py +1 -0
  6. {iatoolkit-2.28.1 → iatoolkit-2.28.3/src/iatoolkit.egg-info}/PKG-INFO +1 -1
  7. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/LICENSE +0 -0
  8. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/LICENSE_COMMUNITY.md +0 -0
  9. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/pyproject.toml +0 -0
  10. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/readme.md +0 -0
  11. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/requirements.txt +0 -0
  12. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/setup.cfg +0 -0
  13. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/base_company.py +0 -0
  14. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/cli_commands.py +0 -0
  15. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/common/__init__.py +0 -0
  16. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/common/exceptions.py +0 -0
  17. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/common/interfaces/__init__.py +0 -0
  18. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
  19. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
  20. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
  21. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
  22. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
  23. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
  24. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
  25. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/common/model_registry.py +0 -0
  26. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/common/routes.py +0 -0
  27. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/common/secret_resolver.py +0 -0
  28. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/common/session_manager.py +0 -0
  29. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/common/util.py +0 -0
  30. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/company_registry.py +0 -0
  31. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/__init__.py +0 -0
  32. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
  33. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
  34. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
  35. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
  36. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
  37. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
  38. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
  39. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
  40. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
  41. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
  42. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
  43. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
  44. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
  45. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
  46. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
  47. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
  48. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
  49. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
  50. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
  51. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
  52. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
  53. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
  54. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
  55. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
  56. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
  57. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
  58. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
  59. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
  60. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
  61. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/core.py +0 -0
  62. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/__init__.py +0 -0
  63. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
  64. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/call_service.py +0 -0
  65. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  66. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  67. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  68. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  69. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  70. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  71. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  72. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/google_auth_client.py +0 -0
  73. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/google_chat_app.py +0 -0
  74. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
  75. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/inference_handler.py +0 -0
  76. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
  77. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
  78. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
  79. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
  80. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
  81. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
  82. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
  83. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
  84. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_proxy.py +0 -0
  85. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/llm_response.py +0 -0
  86. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  87. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/locales/en.yaml +0 -0
  88. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/locales/es.yaml +0 -0
  89. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/repositories/__init__.py +0 -0
  90. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/repositories/api_key_repo.py +0 -0
  91. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/repositories/database_manager.py +0 -0
  92. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/repositories/document_repo.py +0 -0
  93. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
  94. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
  95. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
  96. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
  97. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
  98. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/repositories/memory_repo.py +0 -0
  99. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/repositories/models.py +0 -0
  100. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/repositories/profile_repo.py +0 -0
  101. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
  102. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
  103. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
  104. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/repositories/vs_repo.py +0 -0
  105. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/runtime_logging.py +0 -0
  106. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/__init__.py +0 -0
  107. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/api_key_service.py +0 -0
  108. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/auth_service.py +0 -0
  109. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/benchmark_service.py +0 -0
  110. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/branding_service.py +0 -0
  111. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/company_context_service.py +0 -0
  112. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/configuration_service.py +0 -0
  113. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/context_builder_service.py +0 -0
  114. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/dispatcher_service.py +0 -0
  115. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/embedding_service.py +0 -0
  116. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/excel_service.py +0 -0
  117. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/file_processor_service.py +0 -0
  118. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/history_manager_service.py +0 -0
  119. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/http_tool_service.py +0 -0
  120. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/i18n_service.py +0 -0
  121. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/inference_service.py +0 -0
  122. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/jwt_service.py +0 -0
  123. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/knowledge_base_service.py +0 -0
  124. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/language_service.py +0 -0
  125. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/license_service.py +0 -0
  126. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/llm_client_service.py +0 -0
  127. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/mail_service.py +0 -0
  128. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
  129. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/mcp_token_service.py +0 -0
  130. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/memory_compiler_service.py +0 -0
  131. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/memory_lint_service.py +0 -0
  132. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
  133. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/memory_service.py +0 -0
  134. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/memory_wiki_service.py +0 -0
  135. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
  136. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
  137. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/__init__.py +0 -0
  138. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/contracts.py +0 -0
  139. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
  140. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
  141. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
  142. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
  143. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
  144. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
  145. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
  146. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
  147. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/parsers/validator.py +0 -0
  148. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/pdf_service.py +0 -0
  149. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/profile_service.py +0 -0
  150. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/prompt_resource_service.py +0 -0
  151. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/prompt_service.py +0 -0
  152. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
  153. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/sql_dataset_service.py +0 -0
  154. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/sql_service.py +0 -0
  155. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/sql_source_service.py +0 -0
  156. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/storage_service.py +0 -0
  157. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/structured_output_service.py +0 -0
  158. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
  159. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/system_tools.py +0 -0
  160. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/telemetry_service.py +0 -0
  161. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
  162. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/tool_output_contract.py +0 -0
  163. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/tool_service.py +0 -0
  164. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/user_feedback_service.py +0 -0
  165. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/user_session_context_service.py +0 -0
  166. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/visual_kb_service.py +0 -0
  167. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/visual_tool_service.py +0 -0
  168. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/warmup_service.py +0 -0
  169. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/web_search/__init__.py +0 -0
  170. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
  171. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
  172. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
  173. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/services/web_search_service.py +0 -0
  174. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  175. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
  176. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
  177. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  178. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  179. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_help_content.js +0 -0
  180. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  181. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  182. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_main.js +0 -0
  183. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
  184. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
  185. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  186. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  187. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  188. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  189. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  190. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/styles/chat_public.css +0 -0
  191. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/styles/documents.css +0 -0
  192. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/styles/landing_page.css +0 -0
  193. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/styles/llm_output.css +0 -0
  194. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/static/styles/onboarding.css +0 -0
  195. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/_company_header.html +0 -0
  196. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/_login_widget.html +0 -0
  197. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/account.html +0 -0
  198. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/base.html +0 -0
  199. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/change_password.html +0 -0
  200. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/chat.html +0 -0
  201. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
  202. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/chat_modals.html +0 -0
  203. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/error.html +0 -0
  204. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/forgot_password.html +0 -0
  205. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/home_hosted_default.html +0 -0
  206. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
  207. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  208. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/pdf/base.html +0 -0
  209. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/pdf/letter.html +0 -0
  210. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/pdf/report.html +0 -0
  211. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/pdf/simple.html +0 -0
  212. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/templates/signup.html +0 -0
  213. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/__init__.py +0 -0
  214. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/account_view.py +0 -0
  215. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/api_key_api_view.py +0 -0
  216. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/base_login_view.py +0 -0
  217. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/categories_api_view.py +0 -0
  218. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/change_password_view.py +0 -0
  219. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
  220. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/chat_view.py +0 -0
  221. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/configuration_api_view.py +0 -0
  222. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/connectors_api_view.py +0 -0
  223. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/embedding_api_view.py +0 -0
  224. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/forgot_password_view.py +0 -0
  225. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/help_content_api_view.py +0 -0
  226. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/history_api_view.py +0 -0
  227. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/home_view.py +0 -0
  228. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/init_context_api_view.py +0 -0
  229. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  230. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/load_document_api_view.py +0 -0
  231. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/login_view.py +0 -0
  232. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/logout_api_view.py +0 -0
  233. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/memory_api_view.py +0 -0
  234. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/profile_api_view.py +0 -0
  235. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/prompt_api_view.py +0 -0
  236. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
  237. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
  238. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/rag_api_view.py +0 -0
  239. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/root_redirect_view.py +0 -0
  240. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/signup_view.py +0 -0
  241. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/static_page_view.py +0 -0
  242. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/tool_api_view.py +0 -0
  243. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  244. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/users_api_view.py +0 -0
  245. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit/views/verify_user_view.py +0 -0
  246. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
  247. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  248. {iatoolkit-2.28.1 → iatoolkit-2.28.3}/src/iatoolkit.egg-info/requires.txt +0 -0
  249. {iatoolkit-2.28.1 → 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.1
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.1"
6
+ __version__ = "2.28.3"
7
7
 
8
8
  # Expose main classes and functions at the top level of the package
9
9
 
@@ -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,6 +68,7 @@ class AttachmentPolicyService:
60
68
  provider: str,
61
69
  files: list | None,
62
70
  policy: dict | None = None,
71
+ model: str | None = None,
63
72
  ) -> dict:
64
73
  mode = self.normalize_mode((policy or {}).get("attachment_mode"))
65
74
  fallback = self.normalize_fallback((policy or {}).get("attachment_fallback"))
@@ -93,6 +102,8 @@ class AttachmentPolicyService:
93
102
  "fallback_to_extract": 0,
94
103
  "errors": 0,
95
104
  }
105
+ openrouter_native_image_error: str | None = None
106
+ openrouter_native_image_checked = False
96
107
 
97
108
  for file_obj in files:
98
109
  stats["total_files"] += 1
@@ -105,6 +116,17 @@ class AttachmentPolicyService:
105
116
  native_ok = False
106
117
 
107
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
108
130
  if bool(capabilities.get("supports_native_images")):
109
131
  files_for_context.append(dict(file_obj))
110
132
  native_ok = True
@@ -242,6 +264,98 @@ class AttachmentPolicyService:
242
264
  merged.setdefault("max_files_per_request", 0)
243
265
  return merged
244
266
 
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
+ )
297
+
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
334
+
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
358
+
245
359
  def _normalize_file_meta(self, file_obj: dict) -> dict:
246
360
  if not isinstance(file_obj, dict):
247
361
  return {"name": "attachment", "payload": "", "mime_type": "application/octet-stream", "is_image": False}
@@ -1427,6 +1427,7 @@ class QueryService:
1427
1427
  provider=provider,
1428
1428
  files=files or [],
1429
1429
  policy=effective_attachment_policy,
1430
+ model=effective_model,
1430
1431
  )
1431
1432
  log_stage("attachment_plan")
1432
1433
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 2.28.1
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