iatoolkit 2.60.0__tar.gz → 2.60.2__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 (258) hide show
  1. {iatoolkit-2.60.0/src/iatoolkit.egg-info → iatoolkit-2.60.2}/PKG-INFO +1 -1
  2. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/__init__.py +1 -1
  3. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/connectors/google_drive_connector.py +8 -5
  4. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/memory_question_repo.py +10 -1
  5. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/memory_compiler_service.py +2 -6
  6. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/memory_question_service.py +67 -9
  7. {iatoolkit-2.60.0 → iatoolkit-2.60.2/src/iatoolkit.egg-info}/PKG-INFO +1 -1
  8. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/LICENSE +0 -0
  9. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/LICENSE_COMMUNITY.md +0 -0
  10. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/pyproject.toml +0 -0
  11. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/readme.md +0 -0
  12. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/setup.cfg +0 -0
  13. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/base_company.py +0 -0
  14. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/cli_commands.py +0 -0
  15. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/__init__.py +0 -0
  16. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/bridge_validation.py +0 -0
  17. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/company_paths.py +0 -0
  18. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/exceptions.py +0 -0
  19. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/interfaces/__init__.py +0 -0
  20. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
  21. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
  22. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
  23. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
  24. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
  25. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
  26. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/model_registry.py +0 -0
  27. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/routes.py +0 -0
  28. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/secret_resolver.py +0 -0
  29. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/session_manager.py +0 -0
  30. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/text_splitter.py +0 -0
  31. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/url_safety.py +0 -0
  32. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/common/util.py +0 -0
  33. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/company_registry.py +0 -0
  34. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/__init__.py +0 -0
  35. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
  36. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
  37. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
  38. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
  39. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
  40. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
  41. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
  42. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
  43. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
  44. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
  45. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
  46. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
  47. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
  48. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
  49. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
  50. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
  51. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
  52. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
  53. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
  54. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
  55. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
  56. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
  57. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
  58. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
  59. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
  60. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
  61. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
  62. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
  63. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
  64. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/core.py +0 -0
  65. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/__init__.py +0 -0
  66. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
  67. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/call_service.py +0 -0
  68. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  69. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  70. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  71. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  72. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  73. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  74. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/google_auth_client.py +0 -0
  75. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/google_chat_app.py +0 -0
  76. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
  77. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/inference_handler.py +0 -0
  78. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
  79. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
  80. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
  81. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
  82. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
  83. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
  84. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
  85. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
  86. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
  87. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/llm_proxy.py +0 -0
  88. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/llm_response.py +0 -0
  89. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  90. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/locales/en.yaml +0 -0
  91. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/locales/es.yaml +0 -0
  92. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/__init__.py +0 -0
  93. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/api_key_repo.py +0 -0
  94. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/bridge_repo.py +0 -0
  95. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/database_manager.py +0 -0
  96. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/document_repo.py +0 -0
  97. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
  98. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
  99. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
  100. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
  101. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
  102. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/memory_repo.py +0 -0
  103. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/models.py +0 -0
  104. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/profile_repo.py +0 -0
  105. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
  106. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
  107. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
  108. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/repositories/vs_repo.py +0 -0
  109. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/runtime_logging.py +0 -0
  110. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/__init__.py +0 -0
  111. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/api_key_service.py +0 -0
  112. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/attachment_policy_service.py +0 -0
  113. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/auth_service.py +0 -0
  114. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/branding_service.py +0 -0
  115. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/company_context_service.py +0 -0
  116. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/configuration_service.py +0 -0
  117. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/context_builder_service.py +0 -0
  118. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/dispatcher_service.py +0 -0
  119. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/embedding_service.py +0 -0
  120. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/excel_service.py +0 -0
  121. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/file_processor_service.py +0 -0
  122. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/history_manager_service.py +0 -0
  123. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/http_tool_service.py +0 -0
  124. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/i18n_service.py +0 -0
  125. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/inference_service.py +0 -0
  126. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/jwt_service.py +0 -0
  127. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/knowledge_base_service.py +0 -0
  128. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/language_service.py +0 -0
  129. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/license_service.py +0 -0
  130. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/llm_client_service.py +0 -0
  131. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/mail_service.py +0 -0
  132. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
  133. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/mcp_token_service.py +0 -0
  134. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
  135. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/memory_service.py +0 -0
  136. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/memory_wiki_service.py +0 -0
  137. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
  138. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/operator_identity_service.py +0 -0
  139. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/parsers/__init__.py +0 -0
  140. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/parsers/contracts.py +0 -0
  141. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
  142. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
  143. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
  144. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
  145. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
  146. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
  147. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
  148. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
  149. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/parsers/validator.py +0 -0
  150. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/pdf_service.py +0 -0
  151. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/profile_service.py +0 -0
  152. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/prompt_resource_service.py +0 -0
  153. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/prompt_service.py +0 -0
  154. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/query_service.py +0 -0
  155. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
  156. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/sql_dataset_service.py +0 -0
  157. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/sql_service.py +0 -0
  158. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/sql_source_service.py +0 -0
  159. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/storage_service.py +0 -0
  160. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/structured_output_service.py +0 -0
  161. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
  162. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/system_tools.py +0 -0
  163. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/telemetry_service.py +0 -0
  164. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
  165. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/tool_output_contract.py +0 -0
  166. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/tool_service.py +0 -0
  167. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/user_feedback_service.py +0 -0
  168. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/user_session_context_service.py +0 -0
  169. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/visual_kb_service.py +0 -0
  170. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/visual_tool_service.py +0 -0
  171. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/warmup_service.py +0 -0
  172. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/web_search/__init__.py +0 -0
  173. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
  174. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
  175. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
  176. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/services/web_search_service.py +0 -0
  177. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/images/favicon.ico +0 -0
  178. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/images/favicon.png +0 -0
  179. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  180. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
  181. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
  182. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  183. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  184. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/js/chat_header_navigation.js +0 -0
  185. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/js/chat_help_content.js +0 -0
  186. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  187. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  188. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/js/chat_main.js +0 -0
  189. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
  190. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
  191. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  192. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  193. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  194. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/styles/account.css +0 -0
  195. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  196. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  197. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/styles/chat_public.css +0 -0
  198. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/styles/documents.css +0 -0
  199. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/styles/landing_page.css +0 -0
  200. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/styles/llm_output.css +0 -0
  201. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/static/styles/onboarding.css +0 -0
  202. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/_chat_header.html +0 -0
  203. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/_company_header.html +0 -0
  204. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/_login_widget.html +0 -0
  205. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/account.html +0 -0
  206. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/base.html +0 -0
  207. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/change_password.html +0 -0
  208. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/chat.html +0 -0
  209. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
  210. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/chat_modals.html +0 -0
  211. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/error.html +0 -0
  212. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/forgot_password.html +0 -0
  213. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/home_hosted_default.html +0 -0
  214. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/login_global.html +0 -0
  215. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
  216. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  217. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/pdf/base.html +0 -0
  218. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/pdf/letter.html +0 -0
  219. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/pdf/report.html +0 -0
  220. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/pdf/simple.html +0 -0
  221. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/templates/signup.html +0 -0
  222. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/__init__.py +0 -0
  223. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/account_view.py +0 -0
  224. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/api_key_api_view.py +0 -0
  225. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/base_login_view.py +0 -0
  226. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/categories_api_view.py +0 -0
  227. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/change_password_view.py +0 -0
  228. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
  229. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/chat_view.py +0 -0
  230. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/configuration_api_view.py +0 -0
  231. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/connectors_api_view.py +0 -0
  232. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/embedding_api_view.py +0 -0
  233. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/forgot_password_view.py +0 -0
  234. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/help_content_api_view.py +0 -0
  235. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/history_api_view.py +0 -0
  236. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/home_view.py +0 -0
  237. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/init_context_api_view.py +0 -0
  238. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  239. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/load_document_api_view.py +0 -0
  240. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/login_view.py +0 -0
  241. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/logout_api_view.py +0 -0
  242. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/memory_api_view.py +0 -0
  243. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/profile_api_view.py +0 -0
  244. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/prompt_api_view.py +0 -0
  245. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
  246. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
  247. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/rag_api_view.py +0 -0
  248. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/root_redirect_view.py +0 -0
  249. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/signup_view.py +0 -0
  250. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/static_page_view.py +0 -0
  251. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/tool_api_view.py +0 -0
  252. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  253. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/users_api_view.py +0 -0
  254. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit/views/verify_user_view.py +0 -0
  255. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
  256. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  257. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/src/iatoolkit.egg-info/requires.txt +0 -0
  258. {iatoolkit-2.60.0 → iatoolkit-2.60.2}/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.60.0
3
+ Version: 2.60.2
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.60.0"
6
+ __version__ = "2.60.2"
7
7
 
8
8
  # Expose main classes and functions at the top level of the package
9
9
 
@@ -104,6 +104,9 @@ class DriveChangesPage:
104
104
 
105
105
  class GoogleDriveConnector(FileConnector):
106
106
  PAGE_SIZE = 1000
107
+ # Reads retry Google's transient errors (5xx, 429) with exponential backoff,
108
+ # as googleapiclient does with num_retries; writes are not retried.
109
+ NUM_RETRIES = 3
107
110
 
108
111
  def __init__(
109
112
  self,
@@ -193,7 +196,7 @@ class GoogleDriveConnector(FileConnector):
193
196
  fileId=file_id,
194
197
  fields=FILE_FIELDS,
195
198
  supportsAllDrives=True,
196
- ).execute()
199
+ ).execute(num_retries=self.NUM_RETRIES)
197
200
  except HttpError as exc:
198
201
  if getattr(exc, "status_code", None) in (403, 404) or getattr(getattr(exc, "resp", None), "status", None) in (403, 404):
199
202
  return None
@@ -211,7 +214,7 @@ class GoogleDriveConnector(FileConnector):
211
214
  pageToken=page_token,
212
215
  supportsAllDrives=True,
213
216
  includeItemsFromAllDrives=True,
214
- ).execute()
217
+ ).execute(num_retries=self.NUM_RETRIES)
215
218
  for payload in response.get("files", []):
216
219
  yield DriveFile.from_api(payload)
217
220
  page_token = response.get("nextPageToken")
@@ -269,14 +272,14 @@ class GoogleDriveConnector(FileConnector):
269
272
  downloader = MediaIoBaseDownload(buffer, request)
270
273
  done = False
271
274
  while not done:
272
- _, done = downloader.next_chunk()
275
+ _, done = downloader.next_chunk(num_retries=GoogleDriveConnector.NUM_RETRIES)
273
276
  return buffer.getvalue()
274
277
 
275
278
  # --- Changes ------------------------------------------------------------
276
279
 
277
280
  def get_start_page_token(self) -> str:
278
281
  """Where to start reading changes from: everything after now."""
279
- response = self.drive_service.changes().getStartPageToken(supportsAllDrives=True).execute()
282
+ response = self.drive_service.changes().getStartPageToken(supportsAllDrives=True).execute(num_retries=self.NUM_RETRIES)
280
283
  return str(response.get("startPageToken") or "")
281
284
 
282
285
  def list_changes(self, page_token: str) -> DriveChangesPage:
@@ -292,7 +295,7 @@ class GoogleDriveConnector(FileConnector):
292
295
  supportsAllDrives=True,
293
296
  includeItemsFromAllDrives=True,
294
297
  spaces="drive",
295
- ).execute()
298
+ ).execute(num_retries=self.NUM_RETRIES)
296
299
  changes = [
297
300
  DriveChange(
298
301
  file_id=str(change.get("fileId") or ""),
@@ -6,7 +6,7 @@
6
6
  from __future__ import annotations
7
7
 
8
8
  from injector import inject
9
- from sqlalchemy import desc
9
+ from sqlalchemy import desc, func
10
10
 
11
11
  from iatoolkit.repositories.database_manager import DatabaseManager
12
12
  from iatoolkit.repositories.models import (
@@ -88,6 +88,15 @@ class MemoryQuestionRepo:
88
88
  .all()
89
89
  )
90
90
 
91
+ def last_query_id_before(self, company_id: int, moment) -> int:
92
+ """The newest iat_queries.id of the company created before `moment` (0 when none)."""
93
+ value = (
94
+ self.session.query(func.max(LLMQuery.id))
95
+ .filter(LLMQuery.company_id == company_id, LLMQuery.created_at < moment)
96
+ .scalar()
97
+ )
98
+ return int(value or 0)
99
+
91
100
  def has_queries_after(self, company_id: int, last_query_id: int) -> bool:
92
101
  return (
93
102
  self.session.query(LLMQuery.id)
@@ -62,12 +62,8 @@ class MemoryCompilerService:
62
62
  "type": "object",
63
63
  "properties": {
64
64
  "action": {"type": "string", "enum": ["create", "update", "skip"]},
65
- "target_page_id": {
66
- "anyOf": [
67
- {"type": "integer"},
68
- {"type": "null"},
69
- ]
70
- },
65
+ # Nullable as a type list: the structured-output validator rejects null under anyOf.
66
+ "target_page_id": {"type": ["integer", "null"]},
71
67
  "title": {"type": "string"},
72
68
  "summary": {"type": "string"},
73
69
  "markdown": {"type": "string"},
@@ -8,7 +8,7 @@ from __future__ import annotations
8
8
  import json
9
9
  import logging
10
10
  from contextlib import contextmanager
11
- from datetime import datetime
11
+ from datetime import datetime, timedelta
12
12
 
13
13
  from injector import inject
14
14
  from sqlalchemy import text
@@ -47,6 +47,12 @@ class MemoryQuestionService:
47
47
  MAX_QUESTION_CHARS = 1000
48
48
  MAX_ANSWER_CHARS = 1500
49
49
  MAX_CANDIDATE_CHARS = 500
50
+ # A company's first review (or one whose cursor never advanced) starts with
51
+ # the last days, not with the whole history.
52
+ FIRST_SCAN_DAYS = 7
53
+ REF_KEYS = ("ref", "id", "turn", "turn_ref", "turn_id")
54
+ TRUE_WORDS = {"true", "yes", "si", "sí", "1"}
55
+ FALSE_WORDS = {"false", "no", "0"}
50
56
  # First key of the two-key Postgres advisory lock; the second is the company id.
51
57
  ADVISORY_LOCK_NAMESPACE = 734002
52
58
 
@@ -62,8 +68,9 @@ class MemoryQuestionService:
62
68
  "answered": {"type": "boolean"},
63
69
  "question": {"type": "string"},
64
70
  "topic": {"type": "string"},
65
- "same_as_question_id": {"anyOf": [{"type": "integer"}, {"type": "null"}]},
66
- "same_as_ref": {"anyOf": [{"type": "string"}, {"type": "null"}]},
71
+ # Nullable as a type list: core's validator rejects null under anyOf.
72
+ "same_as_question_id": {"type": ["integer", "null"]},
73
+ "same_as_ref": {"type": ["string", "null"]},
67
74
  },
68
75
  "required": ["ref", "answered"],
69
76
  "additionalProperties": False,
@@ -201,6 +208,10 @@ class MemoryQuestionService:
201
208
  def _scan(self, company: Company) -> dict:
202
209
  counts = {"turns": 0, "reviewed": 0, "answered": 0, "new_questions": 0, "repeated": 0, "batches": 0}
203
210
  cursor = self.question_repo.get_cursor(company.id)
211
+ if not cursor.last_query_id:
212
+ cursor.last_query_id = self.question_repo.last_query_id_before(
213
+ company.id, datetime.now() - timedelta(days=self.FIRST_SCAN_DAYS))
214
+ self.question_repo.commit()
204
215
  queries = self.question_repo.list_queries_after(company.id, cursor.last_query_id, self.MAX_QUERIES_PER_SCAN)
205
216
  candidates = self.question_repo.list_pending_candidates(company.id, self.MAX_QUERIES_PER_SCAN)
206
217
  counts["turns"] = len(queries)
@@ -338,13 +349,60 @@ class MemoryQuestionService:
338
349
  except Exception as exc:
339
350
  logging.warning("Memory question scan for %s could not reach the model: %s", company.short_name, exc)
340
351
  return None
341
- structured = response.get("structured_output") or response.get("parsed_output")
342
- if isinstance(structured, list):
343
- structured = {"items": structured}
344
- items = structured.get("items") if isinstance(structured, dict) else None
345
- if not isinstance(items, list):
352
+ items = self._extract_items(response.get("structured_output"))
353
+ if items is None:
354
+ items = self._extract_items(response.get("parsed_output"))
355
+ if items is None:
356
+ # A top-level list never reaches parsed_output (it carries objects only).
357
+ items = self._extract_items(self._json_from_text(response.get("answer")))
358
+ if items is None:
359
+ logging.warning(
360
+ "Memory question scan for %s did not understand the model's answer: %s",
361
+ company.short_name, str(response.get("answer") or "")[:500],
362
+ )
363
+ return None
364
+ return [normalized for normalized in (self._normalize_item(item) for item in items) if normalized]
365
+
366
+ @staticmethod
367
+ def _extract_items(value) -> list | None:
368
+ """The list of classified turns, whether it comes bare or under some key."""
369
+ if isinstance(value, list):
370
+ return [item for item in value if isinstance(item, dict)]
371
+ if not isinstance(value, dict):
372
+ return None
373
+ if isinstance(value.get("items"), list):
374
+ return [item for item in value["items"] if isinstance(item, dict)]
375
+ for nested in value.values():
376
+ if isinstance(nested, list) and all(isinstance(item, dict) for item in nested):
377
+ return list(nested)
378
+ for key in ("answer", "additional_data", "result", "data"):
379
+ if isinstance(value.get(key), (dict, list)):
380
+ return MemoryQuestionService._extract_items(value[key])
381
+ return None
382
+
383
+ @staticmethod
384
+ def _json_from_text(text) -> object | None:
385
+ raw = str(text or "").strip()
386
+ if raw.startswith("```"):
387
+ raw = raw.strip("`")
388
+ raw = raw[4:] if raw.lower().startswith("json") else raw
389
+ try:
390
+ return json.loads(raw.strip())
391
+ except (TypeError, ValueError):
392
+ return None
393
+
394
+ @classmethod
395
+ def _normalize_item(cls, item: dict) -> dict | None:
396
+ ref = next((item.get(key) for key in cls.REF_KEYS if item.get(key) not in (None, "")), None)
397
+ if ref is None:
398
+ return None
399
+ answered = item.get("answered")
400
+ if isinstance(answered, str):
401
+ word = answered.strip().lower()
402
+ answered = True if word in cls.TRUE_WORDS else False if word in cls.FALSE_WORDS else None
403
+ if not isinstance(answered, bool):
346
404
  return None
347
- return [item for item in items if isinstance(item, dict)]
405
+ return {**item, "ref": str(ref), "answered": answered}
348
406
 
349
407
  def _apply(self, company: Company, batch: list[dict], items: list[dict], open_questions: list[MemoryQuestion],
350
408
  counts: dict) -> None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 2.60.0
3
+ Version: 2.60.2
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