iatoolkit 2.2.2__tar.gz → 2.2.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 (210) hide show
  1. {iatoolkit-2.2.2/src/iatoolkit.egg-info → iatoolkit-2.2.4}/PKG-INFO +1 -1
  2. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/__init__.py +1 -1
  3. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/config/llm_capabilities.yaml +2 -2
  4. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/llm_proxy.py +178 -10
  5. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/locales/en.yaml +19 -3
  6. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/locales/es.yaml +19 -3
  7. {iatoolkit-2.2.2 → iatoolkit-2.2.4/src/iatoolkit.egg-info}/PKG-INFO +1 -1
  8. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/LICENSE +0 -0
  9. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/LICENSE_COMMUNITY.md +0 -0
  10. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/pyproject.toml +0 -0
  11. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/readme.md +0 -0
  12. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/requirements.txt +0 -0
  13. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/setup.cfg +0 -0
  14. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/base_company.py +0 -0
  15. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/cli_commands.py +0 -0
  16. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/common/__init__.py +0 -0
  17. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/common/exceptions.py +0 -0
  18. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/common/interfaces/__init__.py +0 -0
  19. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
  20. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
  21. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
  22. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
  23. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
  24. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
  25. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
  26. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/common/model_registry.py +0 -0
  27. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/common/routes.py +0 -0
  28. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/common/secret_resolver.py +0 -0
  29. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/common/session_manager.py +0 -0
  30. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/common/util.py +0 -0
  31. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/company_registry.py +0 -0
  32. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/config/__init__.py +0 -0
  33. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
  34. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
  35. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/core.py +0 -0
  36. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/__init__.py +0 -0
  37. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
  38. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/call_service.py +0 -0
  39. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  40. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  41. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  42. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  43. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  44. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  45. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  46. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/google_auth_client.py +0 -0
  47. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/google_chat_app.py +0 -0
  48. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
  49. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/inference_handler.py +0 -0
  50. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
  51. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
  52. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
  53. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
  54. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
  55. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
  56. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
  57. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/llm_response.py +0 -0
  58. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  59. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/repositories/__init__.py +0 -0
  60. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/repositories/api_key_repo.py +0 -0
  61. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/repositories/database_manager.py +0 -0
  62. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/repositories/document_repo.py +0 -0
  63. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
  64. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
  65. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
  66. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/repositories/memory_repo.py +0 -0
  67. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/repositories/models.py +0 -0
  68. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/repositories/profile_repo.py +0 -0
  69. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
  70. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
  71. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/repositories/vs_repo.py +0 -0
  72. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/__init__.py +0 -0
  73. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/api_key_service.py +0 -0
  74. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/attachment_policy_service.py +0 -0
  75. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/auth_service.py +0 -0
  76. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/benchmark_service.py +0 -0
  77. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/branding_service.py +0 -0
  78. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/company_context_service.py +0 -0
  79. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/configuration_service.py +0 -0
  80. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/context_builder_service.py +0 -0
  81. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/dispatcher_service.py +0 -0
  82. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/embedding_service.py +0 -0
  83. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/excel_service.py +0 -0
  84. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/file_processor_service.py +0 -0
  85. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/history_manager_service.py +0 -0
  86. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/http_tool_service.py +0 -0
  87. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/i18n_service.py +0 -0
  88. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/inference_service.py +0 -0
  89. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/jwt_service.py +0 -0
  90. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/knowledge_base_service.py +0 -0
  91. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/language_service.py +0 -0
  92. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/license_service.py +0 -0
  93. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/llm_client_service.py +0 -0
  94. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/mail_service.py +0 -0
  95. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/memory_compiler_service.py +0 -0
  96. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/memory_lint_service.py +0 -0
  97. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
  98. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/memory_service.py +0 -0
  99. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/memory_wiki_service.py +0 -0
  100. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
  101. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
  102. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/parsers/__init__.py +0 -0
  103. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/parsers/contracts.py +0 -0
  104. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
  105. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
  106. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
  107. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
  108. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
  109. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
  110. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
  111. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
  112. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/parsers/validator.py +0 -0
  113. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/pdf_service.py +0 -0
  114. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/profile_service.py +0 -0
  115. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/prompt_service.py +0 -0
  116. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/query_service.py +0 -0
  117. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
  118. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/sql_dataset_service.py +0 -0
  119. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/sql_service.py +0 -0
  120. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/sql_source_service.py +0 -0
  121. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/storage_service.py +0 -0
  122. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/structured_output_service.py +0 -0
  123. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
  124. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/system_tools.py +0 -0
  125. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/tool_service.py +0 -0
  126. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/user_feedback_service.py +0 -0
  127. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/user_session_context_service.py +0 -0
  128. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/visual_kb_service.py +0 -0
  129. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/visual_tool_service.py +0 -0
  130. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/warmup_service.py +0 -0
  131. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/web_search/__init__.py +0 -0
  132. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
  133. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
  134. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
  135. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/services/web_search_service.py +0 -0
  136. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  137. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
  138. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
  139. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  140. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  141. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/js/chat_help_content.js +0 -0
  142. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  143. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  144. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/js/chat_main.js +0 -0
  145. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
  146. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
  147. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  148. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  149. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  150. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  151. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  152. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/styles/chat_public.css +0 -0
  153. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/styles/documents.css +0 -0
  154. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/styles/landing_page.css +0 -0
  155. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/styles/llm_output.css +0 -0
  156. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/static/styles/onboarding.css +0 -0
  157. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/system_prompts/__init__.py +0 -0
  158. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/system_prompts/format_styles.prompt +0 -0
  159. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/system_prompts/query_main.prompt +0 -0
  160. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/system_prompts/sql_rules.prompt +0 -0
  161. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/templates/_company_header.html +0 -0
  162. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/templates/_login_widget.html +0 -0
  163. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/templates/base.html +0 -0
  164. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/templates/change_password.html +0 -0
  165. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/templates/chat.html +0 -0
  166. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
  167. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/templates/chat_modals.html +0 -0
  168. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/templates/error.html +0 -0
  169. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/templates/forgot_password.html +0 -0
  170. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/templates/home_hosted_default.html +0 -0
  171. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
  172. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  173. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/templates/pdf/base.html +0 -0
  174. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/templates/pdf/letter.html +0 -0
  175. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/templates/pdf/report.html +0 -0
  176. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/templates/pdf/simple.html +0 -0
  177. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/templates/signup.html +0 -0
  178. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/__init__.py +0 -0
  179. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/api_key_api_view.py +0 -0
  180. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/base_login_view.py +0 -0
  181. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/categories_api_view.py +0 -0
  182. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/change_password_view.py +0 -0
  183. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/chat_view.py +0 -0
  184. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/configuration_api_view.py +0 -0
  185. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/connectors_api_view.py +0 -0
  186. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/embedding_api_view.py +0 -0
  187. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/forgot_password_view.py +0 -0
  188. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/help_content_api_view.py +0 -0
  189. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/history_api_view.py +0 -0
  190. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/home_view.py +0 -0
  191. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/init_context_api_view.py +0 -0
  192. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  193. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/load_document_api_view.py +0 -0
  194. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/login_view.py +0 -0
  195. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/logout_api_view.py +0 -0
  196. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/memory_api_view.py +0 -0
  197. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/profile_api_view.py +0 -0
  198. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/prompt_api_view.py +0 -0
  199. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/rag_api_view.py +0 -0
  200. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/root_redirect_view.py +0 -0
  201. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/signup_view.py +0 -0
  202. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/static_page_view.py +0 -0
  203. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/tool_api_view.py +0 -0
  204. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  205. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/users_api_view.py +0 -0
  206. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit/views/verify_user_view.py +0 -0
  207. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
  208. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  209. {iatoolkit-2.2.2 → iatoolkit-2.2.4}/src/iatoolkit.egg-info/requires.txt +0 -0
  210. {iatoolkit-2.2.2 → iatoolkit-2.2.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.2.2
3
+ Version: 2.2.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.2.2"
6
+ __version__ = "2.2.4"
7
7
 
8
8
  # Expose main classes and functions at the top level of the package
9
9
 
@@ -13,8 +13,8 @@ openai:
13
13
  - text/xml
14
14
  preferred_native_mime_types:
15
15
  - application/pdf
16
- max_file_size_mb: 50
17
- max_files_per_request: 20
16
+ max_file_size_mb: 100
17
+ max_files_per_request: 30
18
18
 
19
19
  gemini:
20
20
  supports_native_files: true
@@ -16,7 +16,7 @@ from iatoolkit.common.model_registry import ModelRegistry
16
16
  from iatoolkit.common.interfaces.secret_provider import SecretProvider
17
17
  from iatoolkit.common.secret_resolver import resolve_secret
18
18
 
19
- from openai import OpenAI # For OpenAI and xAI (OpenAI-compatible)
19
+ from openai import OpenAI, Timeout # For OpenAI and xAI (OpenAI-compatible)
20
20
 
21
21
  from typing import Dict, List, Any, Tuple
22
22
  import threading
@@ -29,7 +29,7 @@ class LLMProxy:
29
29
  """
30
30
 
31
31
  # Class-level cache for low-level clients (per provider + API key)
32
- _clients_cache: Dict[Tuple[str, str, str], Any] = {}
32
+ _clients_cache: Dict[Tuple[Any, ...], Any] = {}
33
33
  _clients_cache_lock = threading.Lock()
34
34
 
35
35
  # Provider identifiers
@@ -39,6 +39,9 @@ class LLMProxy:
39
39
  PROVIDER_XAI = "xai"
40
40
  PROVIDER_ANTHROPIC = "anthropic"
41
41
  PROVIDER_OPENAI_COMPATIBLE = "openai_compatible"
42
+ DEFAULT_CONNECT_TIMEOUT_SECONDS = 10.0
43
+ DEFAULT_READ_TIMEOUT_SECONDS = 300.0
44
+ DEFAULT_MAX_RETRIES = 0
42
45
 
43
46
  @inject
44
47
  def __init__(
@@ -58,7 +61,7 @@ class LLMProxy:
58
61
  self.secret_provider = secret_provider
59
62
 
60
63
  # adapter cache by (provider, api_key, base_url)
61
- self.adapters: Dict[Tuple[str, str, str], Any] = {}
64
+ self.adapters: Dict[Tuple[Any, ...], Any] = {}
62
65
 
63
66
  # -------------------------------------------------------------------------
64
67
  # Public API
@@ -142,14 +145,31 @@ class LLMProxy:
142
145
  client_config = self._get_client_config(company_short_name, provider)
143
146
  api_key = client_config["api_key"]
144
147
  base_url = client_config.get("base_url") or ""
145
- adapter_cache_key = (provider, api_key or "", base_url)
148
+ connect_timeout_seconds = client_config["connect_timeout_seconds"]
149
+ read_timeout_seconds = client_config["read_timeout_seconds"]
150
+ max_retries = client_config["max_retries"]
151
+ adapter_cache_key = (
152
+ provider,
153
+ api_key or "",
154
+ base_url,
155
+ connect_timeout_seconds,
156
+ read_timeout_seconds,
157
+ max_retries,
158
+ )
146
159
 
147
160
  # If already created for this provider+key, just return it
148
161
  if adapter_cache_key in self.adapters and self.adapters[adapter_cache_key] is not None:
149
162
  return self.adapters[adapter_cache_key]
150
163
 
151
164
  # Otherwise, create low-level client from configuration
152
- client = self._get_or_create_client(provider, api_key, base_url=base_url)
165
+ client = self._get_or_create_client(
166
+ provider,
167
+ api_key,
168
+ base_url=base_url,
169
+ connect_timeout_seconds=connect_timeout_seconds,
170
+ read_timeout_seconds=read_timeout_seconds,
171
+ max_retries=max_retries,
172
+ )
153
173
 
154
174
  # Wrap client with the correct adapter
155
175
  if provider == self.PROVIDER_OPENAI:
@@ -194,35 +214,90 @@ class LLMProxy:
194
214
  # Client cache
195
215
  # -------------------------------------------------------------------------
196
216
 
197
- def _get_or_create_client(self, provider: str, api_key: str, base_url: str = "") -> Any:
217
+ def _get_or_create_client(
218
+ self,
219
+ provider: str,
220
+ api_key: str,
221
+ base_url: str = "",
222
+ *,
223
+ connect_timeout_seconds: float | None = None,
224
+ read_timeout_seconds: float | None = None,
225
+ max_retries: int | None = None,
226
+ ) -> Any:
198
227
  """
199
228
  Return a low-level client for the given provider and API key.
200
229
  Uses a class-level cache to avoid recreating clients.
201
230
  """
202
- cache_key = (provider, api_key or "", base_url or "")
231
+ connect_timeout_seconds = self._normalize_positive_float(
232
+ connect_timeout_seconds,
233
+ self.DEFAULT_CONNECT_TIMEOUT_SECONDS,
234
+ )
235
+ read_timeout_seconds = self._normalize_positive_float(
236
+ read_timeout_seconds,
237
+ self.DEFAULT_READ_TIMEOUT_SECONDS,
238
+ )
239
+ max_retries = self._normalize_non_negative_int(
240
+ max_retries,
241
+ self.DEFAULT_MAX_RETRIES,
242
+ )
243
+ cache_key = (
244
+ provider,
245
+ api_key or "",
246
+ base_url or "",
247
+ connect_timeout_seconds,
248
+ read_timeout_seconds,
249
+ max_retries,
250
+ )
203
251
 
204
252
  with self._clients_cache_lock:
205
253
  if cache_key in self._clients_cache:
206
254
  return self._clients_cache[cache_key]
207
255
 
208
- client = self._create_client_for_provider(provider, api_key, base_url=base_url)
256
+ client = self._create_client_for_provider(
257
+ provider,
258
+ api_key,
259
+ base_url=base_url,
260
+ connect_timeout_seconds=connect_timeout_seconds,
261
+ read_timeout_seconds=read_timeout_seconds,
262
+ max_retries=max_retries,
263
+ )
209
264
  self._clients_cache[cache_key] = client
210
265
  return client
211
266
 
212
- def _create_client_for_provider(self, provider: str, api_key: str, base_url: str = "") -> Any:
267
+ def _create_client_for_provider(
268
+ self,
269
+ provider: str,
270
+ api_key: str,
271
+ base_url: str = "",
272
+ *,
273
+ connect_timeout_seconds: float | None = None,
274
+ read_timeout_seconds: float | None = None,
275
+ max_retries: int | None = None,
276
+ ) -> Any:
213
277
  """
214
278
  Actually create the low-level client for a provider.
215
279
  This is the only place where provider-specific client construction lives.
216
280
  """
281
+ timeout = self._build_openai_timeout(
282
+ connect_timeout_seconds=connect_timeout_seconds,
283
+ read_timeout_seconds=read_timeout_seconds,
284
+ )
285
+ max_retries = self._normalize_non_negative_int(
286
+ max_retries,
287
+ self.DEFAULT_MAX_RETRIES,
288
+ )
289
+
217
290
  if provider == self.PROVIDER_OPENAI:
218
291
  # Standard OpenAI client for GPT models
219
- return OpenAI(api_key=api_key)
292
+ return OpenAI(api_key=api_key, timeout=timeout, max_retries=max_retries)
220
293
 
221
294
  if provider == self.PROVIDER_XAI:
222
295
  # xAI Grok is OpenAI-compatible; we can use the OpenAI client with a different base_url.
223
296
  return OpenAI(
224
297
  api_key=api_key,
225
298
  base_url="https://api.x.ai/v1",
299
+ timeout=timeout,
300
+ max_retries=max_retries,
226
301
  )
227
302
 
228
303
  if provider == self.PROVIDER_DEEPSEEK:
@@ -233,6 +308,8 @@ class LLMProxy:
233
308
  return OpenAI(
234
309
  api_key=api_key,
235
310
  base_url="https://api.deepseek.com",
311
+ timeout=timeout,
312
+ max_retries=max_retries,
236
313
  )
237
314
 
238
315
  if provider == self.PROVIDER_OPENAI_COMPATIBLE:
@@ -244,6 +321,8 @@ class LLMProxy:
244
321
  return OpenAI(
245
322
  api_key=api_key,
246
323
  base_url=base_url,
324
+ timeout=timeout,
325
+ max_retries=max_retries,
247
326
  )
248
327
 
249
328
  if provider == self.PROVIDER_GEMINI:
@@ -270,11 +349,100 @@ class LLMProxy:
270
349
  )
271
350
 
272
351
  def _get_client_config(self, company_short_name: str, provider: str) -> dict:
352
+ provider_config = self.configuration_service.get_llm_provider_config(company_short_name, provider) or {}
273
353
  return {
274
354
  "api_key": self._get_api_key_from_config(company_short_name, provider),
275
355
  "base_url": self._get_base_url_from_config(company_short_name, provider),
356
+ "connect_timeout_seconds": self._resolve_provider_float(
357
+ provider_config,
358
+ ("connect_timeout_seconds",),
359
+ self.DEFAULT_CONNECT_TIMEOUT_SECONDS,
360
+ minimum=0.1,
361
+ ),
362
+ "read_timeout_seconds": self._resolve_provider_float(
363
+ provider_config,
364
+ ("read_timeout_seconds", "request_timeout_seconds", "timeout_seconds"),
365
+ self.DEFAULT_READ_TIMEOUT_SECONDS,
366
+ minimum=0.1,
367
+ ),
368
+ "max_retries": self._resolve_provider_int(
369
+ provider_config,
370
+ ("max_retries",),
371
+ self.DEFAULT_MAX_RETRIES,
372
+ minimum=0,
373
+ ),
276
374
  }
277
375
 
376
+ @classmethod
377
+ def _build_openai_timeout(
378
+ cls,
379
+ *,
380
+ connect_timeout_seconds: float | None,
381
+ read_timeout_seconds: float | None,
382
+ ) -> Timeout:
383
+ connect_timeout_seconds = cls._normalize_positive_float(
384
+ connect_timeout_seconds,
385
+ cls.DEFAULT_CONNECT_TIMEOUT_SECONDS,
386
+ )
387
+ read_timeout_seconds = cls._normalize_positive_float(
388
+ read_timeout_seconds,
389
+ cls.DEFAULT_READ_TIMEOUT_SECONDS,
390
+ )
391
+ return Timeout(
392
+ connect=connect_timeout_seconds,
393
+ read=read_timeout_seconds,
394
+ write=read_timeout_seconds,
395
+ pool=read_timeout_seconds,
396
+ )
397
+
398
+ @classmethod
399
+ def _resolve_provider_float(
400
+ cls,
401
+ provider_config: Dict[str, Any],
402
+ keys: tuple[str, ...],
403
+ default: float,
404
+ *,
405
+ minimum: float,
406
+ ) -> float:
407
+ for key in keys:
408
+ if key in provider_config:
409
+ return cls._normalize_positive_float(provider_config.get(key), default, minimum=minimum)
410
+ return cls._normalize_positive_float(default, default, minimum=minimum)
411
+
412
+ @classmethod
413
+ def _resolve_provider_int(
414
+ cls,
415
+ provider_config: Dict[str, Any],
416
+ keys: tuple[str, ...],
417
+ default: int,
418
+ *,
419
+ minimum: int,
420
+ ) -> int:
421
+ for key in keys:
422
+ if key in provider_config:
423
+ return cls._normalize_non_negative_int(provider_config.get(key), default, minimum=minimum)
424
+ return cls._normalize_non_negative_int(default, default, minimum=minimum)
425
+
426
+ @staticmethod
427
+ def _normalize_positive_float(value, default: float, *, minimum: float = 0.1) -> float:
428
+ try:
429
+ parsed = float(value)
430
+ if parsed >= minimum:
431
+ return parsed
432
+ except (TypeError, ValueError):
433
+ pass
434
+ return float(default)
435
+
436
+ @staticmethod
437
+ def _normalize_non_negative_int(value, default: int, *, minimum: int = 0) -> int:
438
+ try:
439
+ parsed = int(value)
440
+ if parsed >= minimum:
441
+ return parsed
442
+ except (TypeError, ValueError):
443
+ pass
444
+ return int(default)
445
+
278
446
  # -------------------------------------------------------------------------
279
447
  # Configuration helpers
280
448
  # -------------------------------------------------------------------------
@@ -45,6 +45,11 @@ ui:
45
45
  tool_router_top_n: "Top N"
46
46
  tool_router_min_confidence: "Min confidence"
47
47
  tool_router_rebuild_profiles: "Rebuild Profiles"
48
+ task_reconciliation_eyebrow: "Task Reconciliation"
49
+ task_reconciliation_total: "Reconciled"
50
+ task_reconciliation_requeued: "Requeued"
51
+ task_reconciliation_normalized: "Normalized"
52
+ task_reconciliation_failed: "Recovered As Failed"
48
53
 
49
54
  inspector:
50
55
  title: "Interaction Inspector"
@@ -386,6 +391,8 @@ ui:
386
391
  sources: "Sources"
387
392
  profiles: "Processing Profiles"
388
393
  runs: "Runs"
394
+ active_tasks: "Active Tasks"
395
+ current_task: "Current Task"
389
396
  sources_title: "Pipeline Sources"
390
397
  sources_description: "Connect folders or buckets and choose how each source should be processed."
391
398
  profiles_title: "Processing Profiles"
@@ -667,6 +674,12 @@ ui:
667
674
  definition_caption: "Pipeline"
668
675
  definition_delete_ok: "Pipeline definition deleted"
669
676
  definition_delete_failed: "Could not delete pipeline definition"
677
+ reset_state: "Reset pipeline state"
678
+ reset_state_title: "Reset pipeline state?"
679
+ reset_state_message: "This permanently deletes prior run inputs and artifacts for this pipeline, clears remembered processing state, and makes the next execution start from scratch."
680
+ reset_state_confirm: "Reset state"
681
+ reset_state_ok: "Pipeline state reset. The next run will start from scratch."
682
+ reset_state_failed: "Could not reset pipeline state"
670
683
  execution_mode_taskless: "Taskless"
671
684
  execution_mode_task_driven: "Task-driven"
672
685
  import_yaml_file: "YAML file"
@@ -723,7 +736,10 @@ ui:
723
736
  daily_cost: "Daily Cost"
724
737
  usage_detail: "Usage Detail"
725
738
  usage_by_user: "Usage by User Identifier"
726
- usage_by_prompt: "Usage by Prompt"
739
+ usage_by_prompt: "Usage by Agent"
740
+ usage_by_prompt_empty: "No agent usage data"
741
+ usage_by_prompt_meta_empty: "0 agents"
742
+ usage_by_prompt_meta_summary: "{count} agents · {tokens} tokens"
727
743
  invoices: "Invoices"
728
744
  daily_closures: "Daily Closures"
729
745
  invoice_detail_title: "Invoice Detail"
@@ -733,7 +749,7 @@ ui:
733
749
  col_date: "Date"
734
750
  col_model: "Model"
735
751
  col_user_identifier: "User Identifier"
736
- col_prompt_name: "Prompt Name"
752
+ col_prompt_name: "Agent Name"
737
753
  col_queries: "Queries"
738
754
  col_prompt: "Prompt"
739
755
  col_completion: "Completion"
@@ -756,7 +772,7 @@ ui:
756
772
  tab_summary: "Summary"
757
773
  tab_usage: "Usage"
758
774
  tab_usage_by_user: "Usage by User"
759
- tab_usage_by_prompt: "Usage by Prompt"
775
+ tab_usage_by_prompt: "Usage by Agent"
760
776
  tab_runs: "Billing Runs"
761
777
  tab_invoices: "Invoices"
762
778
  tab_billing: "Billing"
@@ -46,6 +46,11 @@ ui:
46
46
  tool_router_top_n: "Top N"
47
47
  tool_router_min_confidence: "Confianza mínima"
48
48
  tool_router_rebuild_profiles: "Reconstruir perfiles"
49
+ task_reconciliation_eyebrow: "Conciliación de Tareas"
50
+ task_reconciliation_total: "Conciliadas"
51
+ task_reconciliation_requeued: "Reencoladas"
52
+ task_reconciliation_normalized: "Normalizadas"
53
+ task_reconciliation_failed: "Recuperadas como fallidas"
49
54
 
50
55
  inspector:
51
56
  title: "Inspector de Interacción"
@@ -387,6 +392,8 @@ ui:
387
392
  sources: "Fuentes"
388
393
  profiles: "Perfiles de procesamiento"
389
394
  runs: "Ejecuciones"
395
+ active_tasks: "Tareas activas"
396
+ current_task: "Tarea actual"
390
397
  sources_title: "Fuentes del pipeline"
391
398
  sources_description: "Conecta carpetas o buckets y define cómo se procesa cada fuente."
392
399
  profiles_title: "Perfiles de procesamiento"
@@ -668,6 +675,12 @@ ui:
668
675
  definition_caption: "Pipeline"
669
676
  definition_delete_ok: "Definición de pipeline eliminada"
670
677
  definition_delete_failed: "No se pudo eliminar la definición de pipeline"
678
+ reset_state: "Resetear estado del pipeline"
679
+ reset_state_title: "¿Resetear estado del pipeline?"
680
+ reset_state_message: "Esto elimina de forma permanente los inputs y artifacts de ejecuciones previas de este pipeline, limpia el estado recordado de procesamiento y hace que la próxima ejecución arranque desde cero."
681
+ reset_state_confirm: "Resetear estado"
682
+ reset_state_ok: "Se reseteó el estado del pipeline. La próxima ejecución arrancará desde cero."
683
+ reset_state_failed: "No se pudo resetear el estado del pipeline"
671
684
  execution_mode_taskless: "Taskless"
672
685
  execution_mode_task_driven: "Con tasks"
673
686
  import_yaml_file: "Archivo YAML"
@@ -724,7 +737,10 @@ ui:
724
737
  daily_cost: "Costo Diario"
725
738
  usage_detail: "Detalle de Uso"
726
739
  usage_by_user: "Uso por Usuario"
727
- usage_by_prompt: "Uso por Prompt"
740
+ usage_by_prompt: "Uso por Agente"
741
+ usage_by_prompt_empty: "No hay datos de uso por agente"
742
+ usage_by_prompt_meta_empty: "0 agentes"
743
+ usage_by_prompt_meta_summary: "{count} agentes · {tokens} tokens"
728
744
  invoices: "Facturas"
729
745
  daily_closures: "Cierres Diarios"
730
746
  invoice_detail_title: "Detalle de Factura"
@@ -734,7 +750,7 @@ ui:
734
750
  col_date: "Fecha"
735
751
  col_model: "Modelo"
736
752
  col_user_identifier: "Usuario"
737
- col_prompt_name: "Nombre del Prompt"
753
+ col_prompt_name: "Nombre del Agente"
738
754
  col_queries: "Consultas"
739
755
  col_prompt: "Prompt"
740
756
  col_completion: "Respuesta"
@@ -757,7 +773,7 @@ ui:
757
773
  tab_summary: "Resumen"
758
774
  tab_usage: "Uso"
759
775
  tab_usage_by_user: "Uso por Usuario"
760
- tab_usage_by_prompt: "Uso por Prompt"
776
+ tab_usage_by_prompt: "Uso por Agente"
761
777
  tab_runs: "Operaciones"
762
778
  tab_invoices: "Facturas"
763
779
  tab_billing: "Facturación"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 2.2.2
3
+ Version: 2.2.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