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