iatoolkit 2.3.1__tar.gz → 2.3.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 (231) hide show
  1. {iatoolkit-2.3.1/src/iatoolkit.egg-info → iatoolkit-2.3.4}/PKG-INFO +1 -1
  2. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/__init__.py +1 -1
  3. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/config/system_prompts_pack.yaml +16 -2
  4. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/locales/en.yaml +1 -0
  5. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/locales/es.yaml +1 -0
  6. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/company_context_service.py +24 -14
  7. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/context_builder_service.py +80 -20
  8. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/prompt_service.py +4 -0
  9. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/system_prompt_catalog.py +51 -1
  10. iatoolkit-2.3.4/src/iatoolkit/system_prompts/memory_usage.prompt +13 -0
  11. iatoolkit-2.3.4/src/iatoolkit/views/chat_context_preview_api_view.py +61 -0
  12. iatoolkit-2.3.4/src/iatoolkit/views/prompt_context_preview_api_view.py +66 -0
  13. {iatoolkit-2.3.1 → iatoolkit-2.3.4/src/iatoolkit.egg-info}/PKG-INFO +1 -1
  14. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit.egg-info/SOURCES.txt +3 -0
  15. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/LICENSE +0 -0
  16. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/LICENSE_COMMUNITY.md +0 -0
  17. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/pyproject.toml +0 -0
  18. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/readme.md +0 -0
  19. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/requirements.txt +0 -0
  20. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/setup.cfg +0 -0
  21. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/base_company.py +0 -0
  22. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/cli_commands.py +0 -0
  23. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/common/__init__.py +0 -0
  24. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/common/exceptions.py +0 -0
  25. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/common/interfaces/__init__.py +0 -0
  26. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
  27. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
  28. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
  29. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
  30. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
  31. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
  32. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
  33. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/common/model_registry.py +0 -0
  34. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/common/routes.py +0 -0
  35. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/common/secret_resolver.py +0 -0
  36. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/common/session_manager.py +0 -0
  37. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/common/util.py +0 -0
  38. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/company_registry.py +0 -0
  39. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/config/__init__.py +0 -0
  40. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
  41. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
  42. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/core.py +0 -0
  43. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/__init__.py +0 -0
  44. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
  45. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/call_service.py +0 -0
  46. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  47. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  48. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  49. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  50. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  51. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  52. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  53. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/google_auth_client.py +0 -0
  54. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/google_chat_app.py +0 -0
  55. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
  56. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/inference_handler.py +0 -0
  57. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
  58. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
  59. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
  60. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
  61. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
  62. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
  63. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
  64. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/llm_proxy.py +0 -0
  65. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/llm_response.py +0 -0
  66. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  67. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/repositories/__init__.py +0 -0
  68. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/repositories/api_key_repo.py +0 -0
  69. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/repositories/database_manager.py +0 -0
  70. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/repositories/document_repo.py +0 -0
  71. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
  72. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
  73. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
  74. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/repositories/memory_repo.py +0 -0
  75. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/repositories/models.py +0 -0
  76. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/repositories/profile_repo.py +0 -0
  77. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
  78. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
  79. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
  80. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/repositories/vs_repo.py +0 -0
  81. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/__init__.py +0 -0
  82. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/api_key_service.py +0 -0
  83. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/attachment_policy_service.py +0 -0
  84. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/auth_service.py +0 -0
  85. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/benchmark_service.py +0 -0
  86. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/branding_service.py +0 -0
  87. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/configuration_service.py +0 -0
  88. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/dispatcher_service.py +0 -0
  89. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/embedding_service.py +0 -0
  90. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/excel_service.py +0 -0
  91. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/file_processor_service.py +0 -0
  92. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/history_manager_service.py +0 -0
  93. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/http_tool_service.py +0 -0
  94. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/i18n_service.py +0 -0
  95. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/inference_service.py +0 -0
  96. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/jwt_service.py +0 -0
  97. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/knowledge_base_service.py +0 -0
  98. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/language_service.py +0 -0
  99. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/license_service.py +0 -0
  100. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/llm_client_service.py +0 -0
  101. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/mail_service.py +0 -0
  102. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/memory_compiler_service.py +0 -0
  103. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/memory_lint_service.py +0 -0
  104. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
  105. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/memory_service.py +0 -0
  106. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/memory_wiki_service.py +0 -0
  107. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
  108. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
  109. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/parsers/__init__.py +0 -0
  110. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/parsers/contracts.py +0 -0
  111. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
  112. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
  113. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
  114. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
  115. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
  116. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
  117. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
  118. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
  119. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/parsers/validator.py +0 -0
  120. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/pdf_service.py +0 -0
  121. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/profile_service.py +0 -0
  122. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/prompt_resource_service.py +0 -0
  123. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/query_service.py +0 -0
  124. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
  125. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/sql_dataset_service.py +0 -0
  126. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/sql_service.py +0 -0
  127. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/sql_source_service.py +0 -0
  128. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/storage_service.py +0 -0
  129. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/structured_output_service.py +0 -0
  130. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/system_tools.py +0 -0
  131. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/tool_service.py +0 -0
  132. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/user_feedback_service.py +0 -0
  133. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/user_session_context_service.py +0 -0
  134. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/visual_kb_service.py +0 -0
  135. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/visual_tool_service.py +0 -0
  136. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/warmup_service.py +0 -0
  137. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/web_search/__init__.py +0 -0
  138. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
  139. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
  140. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
  141. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/services/web_search_service.py +0 -0
  142. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  143. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
  144. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
  145. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  146. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  147. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/js/chat_help_content.js +0 -0
  148. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  149. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  150. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/js/chat_main.js +0 -0
  151. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
  152. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
  153. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  154. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  155. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  156. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  157. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  158. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/styles/chat_public.css +0 -0
  159. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/styles/documents.css +0 -0
  160. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/styles/landing_page.css +0 -0
  161. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/styles/llm_output.css +0 -0
  162. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/static/styles/onboarding.css +0 -0
  163. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/__init__.py +0 -0
  164. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/chat_state_rules.prompt +0 -0
  165. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/chat_user_profile.prompt +0 -0
  166. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/core_identity.prompt +0 -0
  167. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/email_output.prompt +0 -0
  168. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/file_download_output.prompt +0 -0
  169. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/format_styles.prompt +0 -0
  170. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/html_structures.prompt +0 -0
  171. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/links_documents.prompt +0 -0
  172. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/multimodal_basics.prompt +0 -0
  173. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/output_basics.prompt +0 -0
  174. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/presentation_formatting.prompt +0 -0
  175. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/query_main.prompt +0 -0
  176. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/sql_aggregation_scope.prompt +0 -0
  177. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/sql_casting.prompt +0 -0
  178. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/sql_core.prompt +0 -0
  179. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/sql_jsonb.prompt +0 -0
  180. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/sql_rules.prompt +0 -0
  181. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/system_prompts/tool_html_passthrough.prompt +0 -0
  182. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/templates/_company_header.html +0 -0
  183. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/templates/_login_widget.html +0 -0
  184. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/templates/base.html +0 -0
  185. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/templates/change_password.html +0 -0
  186. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/templates/chat.html +0 -0
  187. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
  188. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/templates/chat_modals.html +0 -0
  189. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/templates/error.html +0 -0
  190. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/templates/forgot_password.html +0 -0
  191. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/templates/home_hosted_default.html +0 -0
  192. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
  193. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  194. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/templates/pdf/base.html +0 -0
  195. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/templates/pdf/letter.html +0 -0
  196. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/templates/pdf/report.html +0 -0
  197. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/templates/pdf/simple.html +0 -0
  198. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/templates/signup.html +0 -0
  199. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/__init__.py +0 -0
  200. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/api_key_api_view.py +0 -0
  201. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/base_login_view.py +0 -0
  202. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/categories_api_view.py +0 -0
  203. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/change_password_view.py +0 -0
  204. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/chat_view.py +0 -0
  205. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/configuration_api_view.py +0 -0
  206. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/connectors_api_view.py +0 -0
  207. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/embedding_api_view.py +0 -0
  208. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/forgot_password_view.py +0 -0
  209. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/help_content_api_view.py +0 -0
  210. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/history_api_view.py +0 -0
  211. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/home_view.py +0 -0
  212. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/init_context_api_view.py +0 -0
  213. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  214. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/load_document_api_view.py +0 -0
  215. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/login_view.py +0 -0
  216. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/logout_api_view.py +0 -0
  217. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/memory_api_view.py +0 -0
  218. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/profile_api_view.py +0 -0
  219. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/prompt_api_view.py +0 -0
  220. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
  221. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/rag_api_view.py +0 -0
  222. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/root_redirect_view.py +0 -0
  223. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/signup_view.py +0 -0
  224. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/static_page_view.py +0 -0
  225. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/tool_api_view.py +0 -0
  226. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  227. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/users_api_view.py +0 -0
  228. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit/views/verify_user_view.py +0 -0
  229. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  230. {iatoolkit-2.3.1 → iatoolkit-2.3.4}/src/iatoolkit.egg-info/requires.txt +0 -0
  231. {iatoolkit-2.3.1 → iatoolkit-2.3.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.3.1
3
+ Version: 2.3.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.3.1"
6
+ __version__ = "2.3.4"
7
7
 
8
8
  # Expose main classes and functions at the top level of the package
9
9
 
@@ -2,42 +2,47 @@ version: 2
2
2
  prompts:
3
3
  - key: core_identity
4
4
  filename: core_identity.prompt
5
+ section: identity
5
6
  include:
6
7
  execution_modes:
7
8
  - chat
8
9
  - agent
9
10
  - key: chat_user_profile
10
11
  filename: chat_user_profile.prompt
12
+ section: identity
11
13
  include:
12
14
  execution_modes:
13
15
  - chat
14
16
  - key: chat_state_rules
15
17
  filename: chat_state_rules.prompt
18
+ section: conversation_rules
16
19
  include:
17
20
  execution_modes:
18
21
  - chat
19
22
  - key: links_documents
20
23
  filename: links_documents.prompt
24
+ section: conversation_rules
21
25
  include:
22
26
  execution_modes:
23
27
  - chat
24
28
  - agent
25
29
  - key: memory_usage
26
30
  filename: memory_usage.prompt
31
+ section: conversation_rules
27
32
  include:
28
33
  execution_modes:
29
34
  - chat
30
- - agent
31
35
  all_capabilities:
32
36
  - can_use_memory
33
37
  - key: multimodal_basics
34
38
  filename: multimodal_basics.prompt
39
+ section: conversation_rules
35
40
  include:
36
41
  execution_modes:
37
42
  - chat
38
- - agent
39
43
  - key: output_basics
40
44
  filename: output_basics.prompt
45
+ section: output_contract
41
46
  include:
42
47
  execution_modes:
43
48
  - chat
@@ -46,6 +51,7 @@ prompts:
46
51
  - chat_compatible
47
52
  - key: presentation_formatting
48
53
  filename: presentation_formatting.prompt
54
+ section: output_contract
49
55
  include:
50
56
  execution_modes:
51
57
  - chat
@@ -53,6 +59,7 @@ prompts:
53
59
  - chat_compatible
54
60
  - key: html_structures
55
61
  filename: html_structures.prompt
62
+ section: output_contract
56
63
  include:
57
64
  execution_modes:
58
65
  - chat
@@ -60,12 +67,14 @@ prompts:
60
67
  - chat_compatible
61
68
  - key: tool_html_passthrough
62
69
  filename: tool_html_passthrough.prompt
70
+ section: output_contract
63
71
  include:
64
72
  execution_modes:
65
73
  - chat
66
74
  - agent
67
75
  - key: file_download_output
68
76
  filename: file_download_output.prompt
77
+ section: output_contract
69
78
  include:
70
79
  execution_modes:
71
80
  - chat
@@ -74,6 +83,7 @@ prompts:
74
83
  - can_generate_files
75
84
  - key: email_output
76
85
  filename: email_output.prompt
86
+ section: output_contract
77
87
  include:
78
88
  execution_modes:
79
89
  - chat
@@ -82,6 +92,7 @@ prompts:
82
92
  - can_send_email
83
93
  - key: sql_core
84
94
  filename: sql_core.prompt
95
+ section: data_access_rules
85
96
  include:
86
97
  execution_modes:
87
98
  - chat
@@ -90,6 +101,7 @@ prompts:
90
101
  - can_query_sql
91
102
  - key: sql_jsonb
92
103
  filename: sql_jsonb.prompt
104
+ section: data_access_rules
93
105
  include:
94
106
  execution_modes:
95
107
  - chat
@@ -98,6 +110,7 @@ prompts:
98
110
  - can_query_sql
99
111
  - key: sql_casting
100
112
  filename: sql_casting.prompt
113
+ section: data_access_rules
101
114
  include:
102
115
  execution_modes:
103
116
  - chat
@@ -106,6 +119,7 @@ prompts:
106
119
  - can_query_sql
107
120
  - key: sql_aggregation_scope
108
121
  filename: sql_aggregation_scope.prompt
122
+ section: data_access_rules
109
123
  include:
110
124
  execution_modes:
111
125
  - chat
@@ -760,6 +760,7 @@ ui:
760
760
  col_base: "Base"
761
761
  col_markup: "Markup"
762
762
  col_tax: "Tax"
763
+ col_cost_per_1000_runs: "Cost / 1000"
763
764
  col_total: "Total"
764
765
  col_currency: "Currency"
765
766
  col_subtotal: "Subtotal"
@@ -761,6 +761,7 @@ ui:
761
761
  col_base: "Base"
762
762
  col_markup: "Recargo"
763
763
  col_tax: "Impuestos"
764
+ col_cost_per_1000_runs: "Costo / 1000"
764
765
  col_total: "Total"
765
766
  col_currency: "Moneda"
766
767
  col_subtotal: "Subtotal"
@@ -31,46 +31,56 @@ class CompanyContextService:
31
31
  self.asset_repo = asset_repo
32
32
 
33
33
  def get_company_context(self, company_short_name: str) -> str:
34
+ blocks = self.get_company_context_blocks(company_short_name)
35
+ return "\n\n---\n\n".join(
36
+ section
37
+ for section in (
38
+ blocks.get("markdown_context"),
39
+ blocks.get("sql_context"),
40
+ blocks.get("yaml_context"),
41
+ )
42
+ if section
43
+ )
44
+
45
+ def get_company_context_blocks(self, company_short_name: str) -> dict[str, str]:
34
46
  """
35
47
  Builds the full context by aggregating three sources:
36
48
  1. Static context files (Markdown).
37
49
  2. Physical SQL schemas and enriched metadata.
38
50
  3. Residual schema files (YAML files not already covered by SQL enrichment).
39
51
  """
40
- context_parts = []
52
+ md_context = ""
53
+ sql_context = ""
54
+ yaml_context = ""
41
55
  db_tables = []
42
56
 
43
57
  # 1. Context from Markdown (context/*.md) files
44
58
  try:
45
- md_context = self._get_static_file_context(company_short_name)
46
- if md_context:
47
- context_parts.append(md_context)
59
+ md_context = self._get_static_file_context(company_short_name).strip()
48
60
  except Exception as e:
49
61
  logging.warning(f"Could not load Markdown context for '{company_short_name}': {e}")
50
62
 
51
63
  # 2. Resolve company-specific SQL databases. We collect them first so YAML
52
64
  # context can avoid duplicating table definitions already covered by SQL.
53
- sql_context = ""
54
65
  try:
55
66
  sql_context, db_tables = self._get_sql_enriched_context(company_short_name)
67
+ sql_context = sql_context.strip()
56
68
  except Exception as e:
57
69
  logging.warning(f"Could not generate SQL context for '{company_short_name}': {e}")
58
70
 
59
- # 3. Append physical SQL context after markdown. Table-level YAML metadata
60
- # is already merged inline inside the enriched SQL definitions.
61
- if sql_context:
62
- context_parts.append(sql_context)
63
-
64
71
  # 4. Context from residual yaml (schema/*.yaml) files
65
72
  try:
66
- yaml_schema_context = self._get_yaml_schema_context(company_short_name, db_tables)
73
+ yaml_schema_context = self._get_yaml_schema_context(company_short_name, db_tables).strip()
67
74
  if yaml_schema_context:
68
- context_parts.append(f"## Esquemas adicionales\n\n{yaml_schema_context.strip()}")
75
+ yaml_context = f"## Esquemas adicionales\n\n{yaml_schema_context}"
69
76
  except Exception as e:
70
77
  logging.warning(f"Could not load Yaml context for '{company_short_name}': {e}")
71
78
 
72
- # Join all parts with a clear separator
73
- return "\n\n---\n\n".join(context_parts)
79
+ return {
80
+ "markdown_context": md_context,
81
+ "sql_context": sql_context,
82
+ "yaml_context": yaml_context,
83
+ }
74
84
 
75
85
  def get_sql_context(self, company_short_name: str, allowed_databases: List[str] | None = None) -> str:
76
86
  try:
@@ -27,6 +27,14 @@ class ContextBuilderService:
27
27
  MEMORY_TOOL_NAMES = {"iat_memory_search", "iat_memory_get_page"}
28
28
  FILE_GENERATION_TOOL_NAMES = {"iat_generate_excel", "iat_generate_pdf"}
29
29
  EMAIL_TOOL_NAME = "iat_send_email"
30
+ SYSTEM_PROMPT_SECTION_ORDER = (
31
+ "identity",
32
+ "business_context",
33
+ "conversation_rules",
34
+ "retrieval_guidance",
35
+ "data_access_rules",
36
+ "output_contract",
37
+ )
30
38
 
31
39
  """
32
40
  Service responsible for constructing the text contexts and prompts used by the LLM.
@@ -175,28 +183,30 @@ class ContextBuilderService:
175
183
  execution_mode="chat",
176
184
  response_mode="chat_compatible",
177
185
  )
178
- system_prompt_template = system_prompt_payload.get("content", "")
179
186
  selected_system_prompt_keys = system_prompt_payload.get("selected_keys")
180
187
  if not isinstance(selected_system_prompt_keys, list):
181
188
  selected_system_prompt_keys = []
182
- rendered_system_prompt = self.util.render_prompt_from_string(
183
- template_string=system_prompt_template,
184
- question=None,
189
+ rendered_sections = self._render_system_prompt_sections(
190
+ system_prompt_payload=system_prompt_payload,
185
191
  client_data=user_profile,
186
192
  company=company,
187
193
  service_list=available_tools,
188
194
  )
189
195
 
190
196
  # 3. Get company specific context (DB Schemas, Docs, etc.)
191
- company_specific_context = self.company_context_service.get_company_context(company_short_name)
197
+ company_context_blocks = self.company_context_service.get_company_context_blocks(company_short_name)
192
198
  collection_context = self._build_collection_context(company_short_name)
193
199
 
194
- # 4. Merge contexts. Conversational chat sees behavior and identity first,
195
- # then retrieval hints, and only then the heavier company data blocks.
196
- final_system_context = "\n\n".join(
197
- section
198
- for section in (rendered_system_prompt, collection_context, company_specific_context)
199
- if section
200
+ final_system_context = self._join_context_sections(
201
+ rendered_sections.get("identity"),
202
+ company_context_blocks.get("markdown_context"),
203
+ rendered_sections.get("conversation_rules"),
204
+ rendered_sections.get("retrieval_guidance"),
205
+ collection_context,
206
+ rendered_sections.get("data_access_rules"),
207
+ company_context_blocks.get("sql_context"),
208
+ company_context_blocks.get("yaml_context"),
209
+ rendered_sections.get("output_contract"),
200
210
  )
201
211
 
202
212
  return final_system_context, user_profile, selected_system_prompt_keys
@@ -284,14 +294,11 @@ class ContextBuilderService:
284
294
  execution_mode="agent",
285
295
  response_mode=str(resolved_contract.get("response_mode") or "chat_compatible").strip().lower() or "chat_compatible",
286
296
  )
287
- system_prompt_template = system_prompt_payload.get("content", "")
288
297
  selected_system_prompt_keys = system_prompt_payload.get("selected_keys")
289
298
  if not isinstance(selected_system_prompt_keys, list):
290
299
  selected_system_prompt_keys = []
291
-
292
- rendered_system_prompt = self.util.render_prompt_from_string(
293
- template_string=system_prompt_template,
294
- question=None,
300
+ rendered_sections = self._render_system_prompt_sections(
301
+ system_prompt_payload=system_prompt_payload,
295
302
  client_data=user_profile,
296
303
  company=company,
297
304
  service_list=enabled_tools,
@@ -311,14 +318,67 @@ class ContextBuilderService:
311
318
  collection_names=rag_collections,
312
319
  )
313
320
 
314
- final_system_context = "\n\n".join(
315
- section
316
- for section in (rendered_system_prompt, collection_context, sql_context)
317
- if section
321
+ final_system_context = self._join_context_sections(
322
+ rendered_sections.get("identity"),
323
+ rendered_sections.get("conversation_rules"),
324
+ rendered_sections.get("retrieval_guidance"),
325
+ collection_context,
326
+ rendered_sections.get("data_access_rules"),
327
+ sql_context,
328
+ rendered_sections.get("output_contract"),
318
329
  )
319
330
 
320
331
  return final_system_context, user_profile, selected_system_prompt_keys
321
332
 
333
+ def _render_system_prompt_sections(
334
+ self,
335
+ *,
336
+ system_prompt_payload: dict | None,
337
+ client_data: dict | None,
338
+ company: Company,
339
+ service_list: list[dict] | None,
340
+ ) -> dict[str, str]:
341
+ payload = system_prompt_payload or {}
342
+ raw_sections = payload.get("sections")
343
+ rendered_sections: dict[str, str] = {}
344
+
345
+ if isinstance(raw_sections, list) and raw_sections:
346
+ for item in raw_sections:
347
+ if not isinstance(item, dict):
348
+ continue
349
+ section_name = str(item.get("section") or "").strip().lower()
350
+ template_string = str(item.get("content") or "").strip()
351
+ if not section_name or not template_string:
352
+ continue
353
+ rendered_sections[section_name] = self.util.render_prompt_from_string(
354
+ template_string=template_string,
355
+ question=None,
356
+ client_data=client_data,
357
+ company=company,
358
+ service_list=service_list,
359
+ ).strip()
360
+
361
+ if rendered_sections:
362
+ return rendered_sections
363
+
364
+ fallback_content = str(payload.get("content") or "").strip()
365
+ if not fallback_content:
366
+ return {}
367
+
368
+ return {
369
+ "identity": self.util.render_prompt_from_string(
370
+ template_string=fallback_content,
371
+ question=None,
372
+ client_data=client_data,
373
+ company=company,
374
+ service_list=service_list,
375
+ ).strip()
376
+ }
377
+
378
+ @staticmethod
379
+ def _join_context_sections(*sections: str | None) -> str:
380
+ return "\n\n".join(section for section in sections if section)
381
+
322
382
  def _build_collection_context(self, company_short_name: str, collection_names: list[str] | None = None) -> str:
323
383
  try:
324
384
  descriptors = self.knowledge_base_service.get_collection_descriptors(company_short_name)
@@ -674,10 +674,14 @@ class PromptService:
674
674
  selected_keys = payload.get("selected_keys")
675
675
  if not isinstance(selected_keys, list):
676
676
  selected_keys = []
677
+ sections = payload.get("sections")
678
+ if not isinstance(sections, list):
679
+ sections = []
677
680
 
678
681
  return {
679
682
  "content": payload.get("content", ""),
680
683
  "selected_keys": selected_keys,
684
+ "sections": sections,
681
685
  }
682
686
 
683
687
  except IAToolkitException:
@@ -11,6 +11,15 @@ import yaml
11
11
  SYSTEM_PROMPTS_CONFIG_PACKAGE = "iatoolkit.config"
12
12
  SYSTEM_PROMPTS_CONFIG_FILENAME = "system_prompts_pack.yaml"
13
13
  SYSTEM_PROMPTS_PACKAGE = "iatoolkit.system_prompts"
14
+ SYSTEM_PROMPT_SECTION_ORDER = (
15
+ "identity",
16
+ "business_context",
17
+ "conversation_rules",
18
+ "retrieval_guidance",
19
+ "data_access_rules",
20
+ "output_contract",
21
+ )
22
+ SYSTEM_PROMPT_ALLOWED_SECTIONS = set(SYSTEM_PROMPT_SECTION_ORDER)
14
23
 
15
24
 
16
25
  def _read_catalog_text() -> str:
@@ -81,6 +90,17 @@ def _normalize_pattern_list(value: Any, index: int) -> list[str]:
81
90
  return normalized
82
91
 
83
92
 
93
+ def _normalize_section(value: Any, index: int) -> str:
94
+ section = str(value or "").strip().lower()
95
+ if not section:
96
+ raise ValueError(f"prompts[{index}].section is required")
97
+ if section not in SYSTEM_PROMPT_ALLOWED_SECTIONS:
98
+ raise ValueError(
99
+ f"prompts[{index}].section must be one of {list(SYSTEM_PROMPT_SECTION_ORDER)}"
100
+ )
101
+ return section
102
+
103
+
84
104
  def _normalize_include_rule(value: Any, index: int) -> dict:
85
105
  if value in (None, "always"):
86
106
  return {
@@ -165,6 +185,7 @@ def _parse_catalog(text: str) -> list[dict]:
165
185
  filename = str(raw_prompt.get("filename") or "").strip()
166
186
  if not filename:
167
187
  raise ValueError(f"prompts[{index}].filename is required")
188
+ section = _normalize_section(raw_prompt.get("section"), index)
168
189
 
169
190
  include_rule = _normalize_include_rule(raw_prompt.get("include"), index)
170
191
 
@@ -172,6 +193,7 @@ def _parse_catalog(text: str) -> list[dict]:
172
193
  {
173
194
  "key": key,
174
195
  "filename": filename,
196
+ "section": section,
175
197
  "include": include_rule,
176
198
  }
177
199
  )
@@ -279,14 +301,42 @@ def build_system_prompt_payload(
279
301
  for entry in selected_entries:
280
302
  filename = str(entry.get("filename") or "").strip()
281
303
  key = str(entry.get("key") or "").strip()
304
+ section = str(entry.get("section") or "").strip().lower()
282
305
  if not filename or not key:
283
306
  continue
284
307
  content_parts.append(_read_prompt_text(filename))
285
308
  selected_keys.append(key)
286
309
 
310
+ section_buckets: dict[str, dict[str, Any]] = {
311
+ section: {"section": section, "content_parts": [], "selected_keys": []}
312
+ for section in SYSTEM_PROMPT_SECTION_ORDER
313
+ }
314
+ for entry in selected_entries:
315
+ filename = str(entry.get("filename") or "").strip()
316
+ key = str(entry.get("key") or "").strip()
317
+ section = str(entry.get("section") or "").strip().lower()
318
+ if not filename or not key or section not in section_buckets:
319
+ continue
320
+ section_buckets[section]["content_parts"].append(_read_prompt_text(filename))
321
+ section_buckets[section]["selected_keys"].append(key)
322
+
323
+ sections: list[dict] = []
324
+ for section in SYSTEM_PROMPT_SECTION_ORDER:
325
+ bucket = section_buckets[section]
326
+ if not bucket["content_parts"]:
327
+ continue
328
+ sections.append(
329
+ {
330
+ "section": section,
331
+ "content": "\n\n".join(bucket["content_parts"]),
332
+ "selected_keys": list(bucket["selected_keys"]),
333
+ }
334
+ )
335
+
287
336
  return {
288
- "content": "\n\n".join(content_parts),
337
+ "content": "\n\n".join(section["content"] for section in sections),
289
338
  "selected_keys": selected_keys,
339
+ "sections": sections,
290
340
  }
291
341
 
292
342
 
@@ -0,0 +1,13 @@
1
+ ### Memoria personal
2
+
3
+ - El usuario puede tener paginas de memoria personal construidas desde notas,
4
+ links, archivos y mensajes de chat guardados.
5
+ - Usa `iat_memory_search` cuando el usuario pregunte explicitamente por notas
6
+ guardadas, elementos recordados o continuidad personal entre sesiones.
7
+ - Si `iat_memory_search` devuelve un resultado con `has_native_files=true`,
8
+ llama a `iat_memory_get_page` antes de responder cuando el contenido de los
9
+ archivos adjuntos pueda importar.
10
+ - Usa `iat_memory_get_page` para leer una pagina especifica antes de responder
11
+ cuando sea necesario.
12
+ - Prefiere las paginas de memoria como contexto compilado; no asumas que todo
13
+ el contenido guardado es globalmente relevante.
@@ -0,0 +1,61 @@
1
+ # Copyright (c) 2024 Fernando Libedinsky
2
+ # Product: IAToolkit
3
+ #
4
+ # IAToolkit is open source software.
5
+
6
+ from __future__ import annotations
7
+
8
+ import logging
9
+
10
+ from flask import jsonify, request
11
+ from flask.views import MethodView
12
+ from injector import inject
13
+
14
+ from iatoolkit.services.auth_service import AuthService
15
+ from iatoolkit.services.query_service import QueryService
16
+
17
+
18
+ class ChatContextPreviewApiView(MethodView):
19
+ @inject
20
+ def __init__(
21
+ self,
22
+ auth_service: AuthService,
23
+ query_service: QueryService,
24
+ ):
25
+ self.auth_service = auth_service
26
+ self.query_service = query_service
27
+
28
+ def _require_admin_auth(self, company_short_name: str) -> dict | tuple:
29
+ auth_result = self.auth_service.verify_for_company(company_short_name)
30
+ if not auth_result.get("success"):
31
+ status_code = auth_result.get("status_code", 401)
32
+ if status_code == 403:
33
+ return jsonify({"error": "Forbidden"}), 403
34
+ return jsonify(auth_result), status_code
35
+
36
+ role = (auth_result.get("user_role") or "").lower()
37
+ if role not in {"admin", "owner"}:
38
+ return jsonify({"error": "Forbidden"}), 403
39
+
40
+ return auth_result
41
+
42
+ def get(self, company_short_name: str):
43
+ auth = self._require_admin_auth(company_short_name)
44
+ if isinstance(auth, tuple):
45
+ return auth
46
+
47
+ try:
48
+ question = str(request.args.get("question") or "")
49
+ result = self.query_service.preview_chat_context(
50
+ company_short_name=company_short_name,
51
+ user_identifier=auth.get("user_identifier"),
52
+ question=question,
53
+ )
54
+ if result.get("error"):
55
+ status_code = int(result.get("status_code") or 400)
56
+ return jsonify({"error": result.get("error_message") or "Preview failed"}), status_code
57
+
58
+ return jsonify(result), 200
59
+ except Exception as exc:
60
+ logging.exception("Fatal error building chat context preview")
61
+ return jsonify({"error": str(exc)}), 500
@@ -0,0 +1,66 @@
1
+ # Copyright (c) 2024 Fernando Libedinsky
2
+ # Product: IAToolkit
3
+ #
4
+ # IAToolkit is open source software.
5
+
6
+ from __future__ import annotations
7
+
8
+ import logging
9
+
10
+ from flask import jsonify, request
11
+ from flask.views import MethodView
12
+ from injector import inject
13
+
14
+ from iatoolkit.services.auth_service import AuthService
15
+ from iatoolkit.services.query_service import QueryService
16
+
17
+
18
+ class PromptContextPreviewApiView(MethodView):
19
+ @inject
20
+ def __init__(
21
+ self,
22
+ auth_service: AuthService,
23
+ query_service: QueryService,
24
+ ):
25
+ self.auth_service = auth_service
26
+ self.query_service = query_service
27
+
28
+ def _require_admin_auth(self, company_short_name: str) -> dict | tuple:
29
+ auth_result = self.auth_service.verify_for_company(company_short_name)
30
+ if not auth_result.get("success"):
31
+ status_code = auth_result.get("status_code", 401)
32
+ if status_code == 403:
33
+ return jsonify({"error": "Forbidden"}), 403
34
+ return jsonify(auth_result), status_code
35
+
36
+ role = (auth_result.get("user_role") or "").lower()
37
+ if role not in {"admin", "owner"}:
38
+ return jsonify({"error": "Forbidden"}), 403
39
+
40
+ return auth_result
41
+
42
+ def post(self, company_short_name: str, prompt_name: str):
43
+ auth = self._require_admin_auth(company_short_name)
44
+ if isinstance(auth, tuple):
45
+ return auth
46
+
47
+ try:
48
+ payload = request.get_json(silent=True) or {}
49
+ client_data = payload.get("client_data")
50
+ question = payload.get("question") or ""
51
+
52
+ result = self.query_service.preview_prompt_context(
53
+ company_short_name=company_short_name,
54
+ user_identifier=auth.get("user_identifier"),
55
+ prompt_name=prompt_name,
56
+ client_data=client_data if isinstance(client_data, dict) else {},
57
+ question=str(question or ""),
58
+ )
59
+ if result.get("error"):
60
+ status_code = int(result.get("status_code") or 400)
61
+ return jsonify({"error": result.get("error_message") or "Preview failed"}), status_code
62
+
63
+ return jsonify(result), 200
64
+ except Exception as exc:
65
+ logging.exception("Fatal error building prompt context preview")
66
+ return jsonify({"error": str(exc)}), 500
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 2.3.1
3
+ Version: 2.3.4
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
@@ -167,6 +167,7 @@ src/iatoolkit/system_prompts/file_download_output.prompt
167
167
  src/iatoolkit/system_prompts/format_styles.prompt
168
168
  src/iatoolkit/system_prompts/html_structures.prompt
169
169
  src/iatoolkit/system_prompts/links_documents.prompt
170
+ src/iatoolkit/system_prompts/memory_usage.prompt
170
171
  src/iatoolkit/system_prompts/multimodal_basics.prompt
171
172
  src/iatoolkit/system_prompts/output_basics.prompt
172
173
  src/iatoolkit/system_prompts/presentation_formatting.prompt
@@ -199,6 +200,7 @@ src/iatoolkit/views/api_key_api_view.py
199
200
  src/iatoolkit/views/base_login_view.py
200
201
  src/iatoolkit/views/categories_api_view.py
201
202
  src/iatoolkit/views/change_password_view.py
203
+ src/iatoolkit/views/chat_context_preview_api_view.py
202
204
  src/iatoolkit/views/chat_view.py
203
205
  src/iatoolkit/views/configuration_api_view.py
204
206
  src/iatoolkit/views/connectors_api_view.py
@@ -215,6 +217,7 @@ src/iatoolkit/views/logout_api_view.py
215
217
  src/iatoolkit/views/memory_api_view.py
216
218
  src/iatoolkit/views/profile_api_view.py
217
219
  src/iatoolkit/views/prompt_api_view.py
220
+ src/iatoolkit/views/prompt_context_preview_api_view.py
218
221
  src/iatoolkit/views/prompt_resource_api_view.py
219
222
  src/iatoolkit/views/rag_api_view.py
220
223
  src/iatoolkit/views/root_redirect_view.py
File without changes
File without changes
File without changes
File without changes
File without changes