iatoolkit 2.51.1__tar.gz → 2.51.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. {iatoolkit-2.51.1/src/iatoolkit.egg-info → iatoolkit-2.51.3}/PKG-INFO +1 -5
  2. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/pyproject.toml +4 -4
  3. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/__init__.py +1 -1
  4. iatoolkit-2.51.3/src/iatoolkit/common/text_splitter.py +170 -0
  5. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/core.py +0 -2
  6. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/knowledge_base_service.py +4 -3
  7. {iatoolkit-2.51.1 → iatoolkit-2.51.3/src/iatoolkit.egg-info}/PKG-INFO +1 -5
  8. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit.egg-info/SOURCES.txt +1 -1
  9. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit.egg-info/requires.txt +0 -4
  10. iatoolkit-2.51.1/src/iatoolkit/services/benchmark_service.py +0 -139
  11. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/LICENSE +0 -0
  12. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/LICENSE_COMMUNITY.md +0 -0
  13. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/readme.md +0 -0
  14. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/setup.cfg +0 -0
  15. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/base_company.py +0 -0
  16. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/cli_commands.py +0 -0
  17. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/__init__.py +0 -0
  18. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/bridge_validation.py +0 -0
  19. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/exceptions.py +0 -0
  20. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/__init__.py +0 -0
  21. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
  22. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
  23. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
  24. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
  25. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
  26. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
  27. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
  28. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/model_registry.py +0 -0
  29. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/routes.py +0 -0
  30. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/secret_resolver.py +0 -0
  31. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/session_manager.py +0 -0
  32. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/url_safety.py +0 -0
  33. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/util.py +0 -0
  34. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/company_registry.py +0 -0
  35. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/__init__.py +0 -0
  36. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
  37. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
  38. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
  39. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
  40. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
  41. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
  42. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
  43. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
  44. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
  45. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
  46. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
  47. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
  48. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
  49. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
  50. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
  51. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
  52. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
  53. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
  54. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
  55. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
  56. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
  57. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
  58. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
  59. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
  60. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
  61. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
  62. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
  63. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
  64. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
  65. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/__init__.py +0 -0
  66. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
  67. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/call_service.py +0 -0
  68. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  69. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  70. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  71. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  72. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  73. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  74. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  75. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/google_auth_client.py +0 -0
  76. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/google_chat_app.py +0 -0
  77. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
  78. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/inference_handler.py +0 -0
  79. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
  80. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
  81. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
  82. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
  83. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
  84. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
  85. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
  86. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
  87. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
  88. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_proxy.py +0 -0
  89. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_response.py +0 -0
  90. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  91. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/locales/en.yaml +0 -0
  92. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/locales/es.yaml +0 -0
  93. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/__init__.py +0 -0
  94. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/api_key_repo.py +0 -0
  95. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/bridge_repo.py +0 -0
  96. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/database_manager.py +0 -0
  97. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/document_repo.py +0 -0
  98. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
  99. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
  100. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
  101. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
  102. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
  103. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/memory_repo.py +0 -0
  104. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/models.py +0 -0
  105. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/profile_repo.py +0 -0
  106. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
  107. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
  108. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
  109. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/vs_repo.py +0 -0
  110. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/runtime_logging.py +0 -0
  111. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/__init__.py +0 -0
  112. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/api_key_service.py +0 -0
  113. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/attachment_policy_service.py +0 -0
  114. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/auth_service.py +0 -0
  115. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/branding_service.py +0 -0
  116. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/company_context_service.py +0 -0
  117. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/configuration_service.py +0 -0
  118. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/context_builder_service.py +0 -0
  119. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/dispatcher_service.py +0 -0
  120. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/embedding_service.py +0 -0
  121. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/excel_service.py +0 -0
  122. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/file_processor_service.py +0 -0
  123. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/history_manager_service.py +0 -0
  124. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/http_tool_service.py +0 -0
  125. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/i18n_service.py +0 -0
  126. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/inference_service.py +0 -0
  127. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/jwt_service.py +0 -0
  128. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/language_service.py +0 -0
  129. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/license_service.py +0 -0
  130. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/llm_client_service.py +0 -0
  131. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/mail_service.py +0 -0
  132. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
  133. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/mcp_token_service.py +0 -0
  134. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/memory_compiler_service.py +0 -0
  135. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/memory_lint_service.py +0 -0
  136. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
  137. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/memory_service.py +0 -0
  138. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/memory_wiki_service.py +0 -0
  139. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
  140. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
  141. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/operator_identity_service.py +0 -0
  142. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/__init__.py +0 -0
  143. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/contracts.py +0 -0
  144. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
  145. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
  146. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
  147. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
  148. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
  149. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
  150. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
  151. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
  152. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/validator.py +0 -0
  153. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/pdf_service.py +0 -0
  154. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/profile_service.py +0 -0
  155. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/prompt_resource_service.py +0 -0
  156. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/prompt_service.py +0 -0
  157. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/query_service.py +0 -0
  158. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
  159. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/sql_dataset_service.py +0 -0
  160. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/sql_service.py +0 -0
  161. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/sql_source_service.py +0 -0
  162. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/storage_service.py +0 -0
  163. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/structured_output_service.py +0 -0
  164. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
  165. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/system_tools.py +0 -0
  166. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/telemetry_service.py +0 -0
  167. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
  168. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/tool_output_contract.py +0 -0
  169. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/tool_service.py +0 -0
  170. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/user_feedback_service.py +0 -0
  171. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/user_session_context_service.py +0 -0
  172. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/visual_kb_service.py +0 -0
  173. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/visual_tool_service.py +0 -0
  174. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/warmup_service.py +0 -0
  175. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/web_search/__init__.py +0 -0
  176. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
  177. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
  178. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
  179. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/web_search_service.py +0 -0
  180. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  181. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
  182. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
  183. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  184. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  185. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_help_content.js +0 -0
  186. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  187. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  188. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_main.js +0 -0
  189. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
  190. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
  191. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  192. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  193. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  194. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  195. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  196. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/styles/chat_public.css +0 -0
  197. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/styles/documents.css +0 -0
  198. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/styles/landing_page.css +0 -0
  199. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/styles/llm_output.css +0 -0
  200. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/styles/onboarding.css +0 -0
  201. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/_company_header.html +0 -0
  202. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/_login_widget.html +0 -0
  203. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/account.html +0 -0
  204. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/base.html +0 -0
  205. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/change_password.html +0 -0
  206. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/chat.html +0 -0
  207. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
  208. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/chat_modals.html +0 -0
  209. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/error.html +0 -0
  210. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/forgot_password.html +0 -0
  211. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/home_hosted_default.html +0 -0
  212. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
  213. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  214. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/pdf/base.html +0 -0
  215. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/pdf/letter.html +0 -0
  216. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/pdf/report.html +0 -0
  217. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/pdf/simple.html +0 -0
  218. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/signup.html +0 -0
  219. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/__init__.py +0 -0
  220. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/account_view.py +0 -0
  221. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/api_key_api_view.py +0 -0
  222. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/base_login_view.py +0 -0
  223. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/categories_api_view.py +0 -0
  224. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/change_password_view.py +0 -0
  225. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
  226. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/chat_view.py +0 -0
  227. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/configuration_api_view.py +0 -0
  228. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/connectors_api_view.py +0 -0
  229. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/embedding_api_view.py +0 -0
  230. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/forgot_password_view.py +0 -0
  231. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/help_content_api_view.py +0 -0
  232. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/history_api_view.py +0 -0
  233. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/home_view.py +0 -0
  234. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/init_context_api_view.py +0 -0
  235. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  236. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/load_document_api_view.py +0 -0
  237. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/login_view.py +0 -0
  238. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/logout_api_view.py +0 -0
  239. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/memory_api_view.py +0 -0
  240. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/profile_api_view.py +0 -0
  241. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/prompt_api_view.py +0 -0
  242. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
  243. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
  244. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/rag_api_view.py +0 -0
  245. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/root_redirect_view.py +0 -0
  246. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/signup_view.py +0 -0
  247. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/static_page_view.py +0 -0
  248. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/tool_api_view.py +0 -0
  249. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  250. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/users_api_view.py +0 -0
  251. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/verify_user_view.py +0 -0
  252. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  253. {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 2.51.1
3
+ Version: 2.51.3
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
@@ -47,9 +47,6 @@ Requires-Dist: humanfriendly==10.0
47
47
  Requires-Dist: idna==3.10
48
48
  Requires-Dist: injector==0.22.0
49
49
  Requires-Dist: Jinja2==3.1.5
50
- Requires-Dist: langchain==0.3.19
51
- Requires-Dist: langchain-core==0.3.35
52
- Requires-Dist: langchain-text-splitters==0.3.6
53
50
  Requires-Dist: markdown2==2.5.3
54
51
  Requires-Dist: nh3==0.3.7
55
52
  Requires-Dist: openai==2.8.1
@@ -79,7 +76,6 @@ Requires-Dist: SQLAlchemy==2.0.49
79
76
  Requires-Dist: sqlalchemy-redshift==1.0.0
80
77
  Requires-Dist: redshift_connector==2.1.14
81
78
  Requires-Dist: tiktoken==0.8.0
82
- Requires-Dist: tokenizers>=0.22.0
83
79
  Requires-Dist: websocket-client==1.8.0
84
80
  Requires-Dist: websockets==14.1
85
81
  Requires-Dist: Werkzeug==3.1.3
@@ -59,9 +59,6 @@ dependencies = [
59
59
  "idna==3.10",
60
60
  "injector==0.22.0",
61
61
  "Jinja2==3.1.5",
62
- "langchain==0.3.19",
63
- "langchain-core==0.3.35",
64
- "langchain-text-splitters==0.3.6",
65
62
  "markdown2==2.5.3",
66
63
  "nh3==0.3.7",
67
64
  "openai==2.8.1",
@@ -91,7 +88,10 @@ dependencies = [
91
88
  "sqlalchemy-redshift==1.0.0",
92
89
  "redshift_connector==2.1.14",
93
90
  "tiktoken==0.8.0",
94
- "tokenizers>=0.22.0",
91
+ # tokenizers is not declared: nothing here imports it, and the only
92
+ # package that needs it is transformers, which arrives through the
93
+ # docling and inference extras and pulls its own. Declaring it put 8MB
94
+ # of Rust bindings into every install that uses neither.
95
95
  "websocket-client==1.8.0",
96
96
  "websockets==14.1",
97
97
  "Werkzeug==3.1.3",
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # IAToolkit is open source software.
5
5
 
6
- __version__ = "2.51.1"
6
+ __version__ = "2.51.3"
7
7
 
8
8
  # Expose main classes and functions at the top level of the package
9
9
 
@@ -0,0 +1,170 @@
1
+ """Recursive character text splitting for the RAG ingestion path.
2
+
3
+ A drop-in replacement for `langchain_text_splitters.RecursiveCharacterTextSplitter`,
4
+ written out here because that single class was the only langchain import in the
5
+ whole fleet and it dragged langchain-core, langsmith, zstandard and orjson into
6
+ every deployment.
7
+
8
+ The behaviour is reproduced exactly, not approximated: the chunk boundaries this
9
+ produces decide how documents are embedded, so a corpus ingested before the swap
10
+ and one ingested after have to agree. `src/tests/common/test_text_splitter.py`
11
+ pins that with golden fixtures captured from the original implementation.
12
+
13
+ Two details are easy to get wrong when reading the algorithm:
14
+
15
+ - Separators are matched as regular expressions, but the caller passes literals,
16
+ so each one is `re.escape`d before use. Without that, the "." separator this
17
+ codebase configures would match every character.
18
+ - `keep_separator` is True here (langchain's own default for the recursive
19
+ splitter, which overrides the False it inherits). The separator is attached to
20
+ the *start* of the following piece, and the pieces are then joined with "" -
21
+ not with the separator - when merging. Joining with the separator instead
22
+ duplicates it in every chunk.
23
+ """
24
+
25
+ import logging
26
+ import re
27
+ from typing import Callable, Iterable, List, Optional
28
+
29
+
30
+ logger = logging.getLogger(__name__)
31
+
32
+
33
+ class RecursiveCharacterTextSplitter:
34
+ """Splits text by trying each separator in turn, falling back to the next.
35
+
36
+ For every stretch of text the first separator that occurs in it is used. Any
37
+ piece still larger than `chunk_size` is split again with the remaining
38
+ separators, and the pieces that do fit are merged back up to `chunk_size`
39
+ with `chunk_overlap` characters carried between neighbours.
40
+ """
41
+
42
+ def __init__(
43
+ self,
44
+ separators: Optional[List[str]] = None,
45
+ chunk_size: int = 4000,
46
+ chunk_overlap: int = 200,
47
+ length_function: Callable[[str], int] = len,
48
+ keep_separator: bool = True,
49
+ strip_whitespace: bool = True,
50
+ ) -> None:
51
+ if chunk_overlap > chunk_size:
52
+ raise ValueError(
53
+ f"Got a larger chunk overlap ({chunk_overlap}) than chunk size "
54
+ f"({chunk_size}), should be smaller."
55
+ )
56
+ self._separators = separators or ["\n\n", "\n", " ", ""]
57
+ self._chunk_size = chunk_size
58
+ self._chunk_overlap = chunk_overlap
59
+ self._length_function = length_function
60
+ self._keep_separator = keep_separator
61
+ self._strip_whitespace = strip_whitespace
62
+
63
+ def split_text(self, text: str) -> List[str]:
64
+ return self._split_text(text, self._separators)
65
+
66
+ def _split_text(self, text: str, separators: List[str]) -> List[str]:
67
+ final_chunks: List[str] = []
68
+
69
+ # The last separator is the fallback when none of the others occur.
70
+ separator = separators[-1]
71
+ new_separators: List[str] = []
72
+ for i, candidate in enumerate(separators):
73
+ if candidate == "":
74
+ separator = candidate
75
+ break
76
+ if re.search(re.escape(candidate), text):
77
+ separator = candidate
78
+ new_separators = separators[i + 1:]
79
+ break
80
+
81
+ splits = self._split_with_separator(text, separator)
82
+
83
+ # Pieces that already fit accumulate until one does not; that one is
84
+ # flushed first so the recursion cannot reorder the output.
85
+ good_splits: List[str] = []
86
+ merge_separator = "" if self._keep_separator else separator
87
+ for piece in splits:
88
+ if self._length_function(piece) < self._chunk_size:
89
+ good_splits.append(piece)
90
+ continue
91
+ if good_splits:
92
+ final_chunks.extend(self._merge_splits(good_splits, merge_separator))
93
+ good_splits = []
94
+ if not new_separators:
95
+ # No separator left to try: the piece goes out oversized rather
96
+ # than being cut mid-word.
97
+ final_chunks.append(piece)
98
+ else:
99
+ final_chunks.extend(self._split_text(piece, new_separators))
100
+ if good_splits:
101
+ final_chunks.extend(self._merge_splits(good_splits, merge_separator))
102
+ return final_chunks
103
+
104
+ def _split_with_separator(self, text: str, separator: str) -> List[str]:
105
+ """Splits on `separator`, keeping it attached to the piece that follows."""
106
+ if not separator:
107
+ return [c for c in list(text) if c != ""]
108
+
109
+ parts = re.split(f"({re.escape(separator)})", text)
110
+ if self._keep_separator:
111
+ # re.split with a capturing group alternates text, separator, text...
112
+ # Pairing each separator with the following text is what puts the
113
+ # separator at the start of its piece.
114
+ splits = [parts[i] + parts[i + 1] for i in range(1, len(parts), 2)]
115
+ if len(parts) % 2 == 0:
116
+ splits += parts[-1:]
117
+ splits = [parts[0]] + splits
118
+ else:
119
+ splits = re.split(re.escape(separator), text)
120
+ return [s for s in splits if s != ""]
121
+
122
+ def _join_docs(self, docs: List[str], separator: str) -> Optional[str]:
123
+ text = separator.join(docs)
124
+ if self._strip_whitespace:
125
+ text = text.strip()
126
+ return text or None
127
+
128
+ def _merge_splits(self, splits: Iterable[str], separator: str) -> List[str]:
129
+ """Packs consecutive pieces into chunks, carrying `chunk_overlap` over."""
130
+ separator_len = self._length_function(separator)
131
+
132
+ docs: List[str] = []
133
+ current_doc: List[str] = []
134
+ total = 0
135
+ for piece in splits:
136
+ piece_len = self._length_function(piece)
137
+ if (
138
+ total + piece_len + (separator_len if len(current_doc) > 0 else 0)
139
+ > self._chunk_size
140
+ ):
141
+ if total > self._chunk_size:
142
+ logger.warning(
143
+ "Created a chunk of size %s, which is longer than the "
144
+ "specified %s",
145
+ total,
146
+ self._chunk_size,
147
+ )
148
+ if len(current_doc) > 0:
149
+ doc = self._join_docs(current_doc, separator)
150
+ if doc is not None:
151
+ docs.append(doc)
152
+ # Drop from the front until what is left is small enough to
153
+ # serve as the overlap for the next chunk.
154
+ while total > self._chunk_overlap or (
155
+ total
156
+ + piece_len
157
+ + (separator_len if len(current_doc) > 0 else 0)
158
+ > self._chunk_size
159
+ and total > 0
160
+ ):
161
+ total -= self._length_function(current_doc[0]) + (
162
+ separator_len if len(current_doc) > 1 else 0
163
+ )
164
+ current_doc = current_doc[1:]
165
+ current_doc.append(piece)
166
+ total += piece_len + (separator_len if len(current_doc) > 1 else 0)
167
+ doc = self._join_docs(current_doc, separator)
168
+ if doc is not None:
169
+ docs.append(doc)
170
+ return docs
@@ -415,7 +415,6 @@ class IAToolkit:
415
415
  def _bind_services(self, binder: Binder):
416
416
  from iatoolkit.services.query_service import QueryService
417
417
  from iatoolkit.services.api_key_service import ApiKeyService
418
- from iatoolkit.services.benchmark_service import BenchmarkService
419
418
  from iatoolkit.services.parsers.parsing_service import ParsingService
420
419
  from iatoolkit.services.parsers.provider_factory import ParsingProviderFactory
421
420
  from iatoolkit.services.parsers.provider_resolver import ParsingProviderResolver
@@ -458,7 +457,6 @@ class IAToolkit:
458
457
 
459
458
  binder.bind(QueryService, to=QueryService)
460
459
  binder.bind(ApiKeyService, to=ApiKeyService)
461
- binder.bind(BenchmarkService, to=BenchmarkService)
462
460
  binder.bind(ParsingService, to=ParsingService)
463
461
  binder.bind(ParsingProviderFactory, to=ParsingProviderFactory)
464
462
  binder.bind(ParsingProviderResolver, to=ParsingProviderResolver)
@@ -12,7 +12,7 @@ from iatoolkit.services.profile_service import ProfileService
12
12
  from iatoolkit.services.i18n_service import I18nService
13
13
  from iatoolkit.services.storage_service import StorageService
14
14
  from iatoolkit.services.parsers.parsing_service import ParsingService
15
- from langchain_text_splitters import RecursiveCharacterTextSplitter
15
+ from iatoolkit.common.text_splitter import RecursiveCharacterTextSplitter
16
16
  from iatoolkit.services.visual_kb_service import VisualKnowledgeBaseService
17
17
  from sqlalchemy import desc, func
18
18
  from typing import Any
@@ -50,7 +50,8 @@ class KnowledgeBaseService:
50
50
  self.profile_service = profile_service
51
51
  self.i18n_service = i18n_service
52
52
 
53
- # Configure LangChain for intelligent text splitting
53
+ # Chunking for the RAG index. These numbers decide how the corpus is
54
+ # embedded, so changing them means re-ingesting what is already stored.
54
55
  self.text_splitter = RecursiveCharacterTextSplitter(
55
56
  chunk_size=1000,
56
57
  chunk_overlap=100,
@@ -83,7 +84,7 @@ class KnowledgeBaseService:
83
84
  Synchronously processes a document through the entire RAG pipeline:
84
85
  1. Saves initial metadata and raw content reference to the SQL Document table.
85
86
  2. Parses content via configured parsing provider (docling/basic/custom).
86
- 3. Splits the text into semantic chunks using LangChain.
87
+ 3. Splits the text into semantic chunks.
87
88
  4. Vectorizes and saves chunks to the Vector Store (VSRepo).
88
89
  5. Updates the document status to ACTIVE or FAILED.
89
90
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 2.51.1
3
+ Version: 2.51.3
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
@@ -47,9 +47,6 @@ Requires-Dist: humanfriendly==10.0
47
47
  Requires-Dist: idna==3.10
48
48
  Requires-Dist: injector==0.22.0
49
49
  Requires-Dist: Jinja2==3.1.5
50
- Requires-Dist: langchain==0.3.19
51
- Requires-Dist: langchain-core==0.3.35
52
- Requires-Dist: langchain-text-splitters==0.3.6
53
50
  Requires-Dist: markdown2==2.5.3
54
51
  Requires-Dist: nh3==0.3.7
55
52
  Requires-Dist: openai==2.8.1
@@ -79,7 +76,6 @@ Requires-Dist: SQLAlchemy==2.0.49
79
76
  Requires-Dist: sqlalchemy-redshift==1.0.0
80
77
  Requires-Dist: redshift_connector==2.1.14
81
78
  Requires-Dist: tiktoken==0.8.0
82
- Requires-Dist: tokenizers>=0.22.0
83
79
  Requires-Dist: websocket-client==1.8.0
84
80
  Requires-Dist: websockets==14.1
85
81
  Requires-Dist: Werkzeug==3.1.3
@@ -20,6 +20,7 @@ src/iatoolkit/common/model_registry.py
20
20
  src/iatoolkit/common/routes.py
21
21
  src/iatoolkit/common/secret_resolver.py
22
22
  src/iatoolkit/common/session_manager.py
23
+ src/iatoolkit/common/text_splitter.py
23
24
  src/iatoolkit/common/url_safety.py
24
25
  src/iatoolkit/common/util.py
25
26
  src/iatoolkit/common/interfaces/__init__.py
@@ -109,7 +110,6 @@ src/iatoolkit/services/__init__.py
109
110
  src/iatoolkit/services/api_key_service.py
110
111
  src/iatoolkit/services/attachment_policy_service.py
111
112
  src/iatoolkit/services/auth_service.py
112
- src/iatoolkit/services/benchmark_service.py
113
113
  src/iatoolkit/services/branding_service.py
114
114
  src/iatoolkit/services/company_context_service.py
115
115
  src/iatoolkit/services/configuration_service.py
@@ -37,9 +37,6 @@ humanfriendly==10.0
37
37
  idna==3.10
38
38
  injector==0.22.0
39
39
  Jinja2==3.1.5
40
- langchain==0.3.19
41
- langchain-core==0.3.35
42
- langchain-text-splitters==0.3.6
43
40
  markdown2==2.5.3
44
41
  nh3==0.3.7
45
42
  openai==2.8.1
@@ -69,7 +66,6 @@ SQLAlchemy==2.0.49
69
66
  sqlalchemy-redshift==1.0.0
70
67
  redshift_connector==2.1.14
71
68
  tiktoken==0.8.0
72
- tokenizers>=0.22.0
73
69
  websocket-client==1.8.0
74
70
  websockets==14.1
75
71
  Werkzeug==3.1.3
@@ -1,139 +0,0 @@
1
- # Copyright (c) 2024 Fernando Libedinsky
2
- # Product: IAToolkit
3
- #
4
- # IAToolkit is open source software.
5
-
6
- import pandas as pd
7
- import time
8
- import logging
9
- from injector import inject
10
- from iatoolkit.services.query_service import QueryService
11
- from iatoolkit.repositories.profile_repo import ProfileRepo
12
- from iatoolkit.common.exceptions import IAToolkitException
13
-
14
-
15
- class BenchmarkService:
16
- @inject
17
- def __init__(self, query_service: QueryService, profile_repo: ProfileRepo):
18
- self.query_service = query_service
19
- self.profile_repo = profile_repo
20
-
21
- def _update_results_row(self, df: pd.DataFrame, index: int,
22
- status: str,
23
- context_time: float,
24
- gpt_time: float,
25
- answer: str,
26
- error_msg: str,
27
- query_id: int,
28
- stats: dict):
29
- df.at[index, 'status'] = status
30
- df.at[index, 'context_time'] = round(context_time, 2)
31
- df.at[index, 'gpt_time'] = round(gpt_time, 2)
32
- df.at[index, 'answer'] = answer
33
- df.at[index, 'error_message'] = error_msg[:512]
34
- df.at[index, 'query_id'] = query_id
35
- df.at[index, 'in_tokens'] = stats.get('input_tokens', 0)
36
- df.at[index, 'out_tokens'] = stats.get('output_tokens', 0)
37
- df.at[index, 'retry'] = stats.get('sql_retry_count', 0)
38
-
39
- def run(self, company_short_name: str, file_path: str):
40
- if not file_path.endswith('.xlsx'):
41
- raise IAToolkitException(IAToolkitException.ErrorType.INVALID_PARAMETER,
42
- f"solo se leer archivos .xlsx")
43
-
44
- try:
45
- df = pd.read_excel(file_path, keep_default_na=False)
46
- except FileNotFoundError:
47
- raise IAToolkitException(IAToolkitException.ErrorType.INVALID_NAME,
48
- f"El archivo no fue encontrado en: {file_path}")
49
-
50
- required_columns = ['username', 'client_identity', 'prompt_name', 'question', 'model']
51
- if not all(col in df.columns for col in required_columns):
52
- raise IAToolkitException(IAToolkitException.ErrorType.INVALID_PARAMETER,
53
- f"La planilla debe contener las columnas: {required_columns}")
54
-
55
- # Añadir columnas para los resultados
56
- df['status'] = 'pending'
57
- df['context_time'] = 0.0
58
- df['gpt_time'] = 0.0
59
- df['answer'] = ''
60
- df['error_message'] = ''
61
- df['query_id'] = 0
62
- df['in_tokens'] = 0
63
- df['out_tokens'] = 0
64
- df['retry'] = 0
65
-
66
- company = self.profile_repo.get_company_by_short_name(company_short_name)
67
- if not company:
68
- raise IAToolkitException(IAToolkitException.ErrorType.CONFIG_ERROR, f"Compañía {company_short_name} no encontrada.")
69
-
70
- total_rows = len(df)
71
- logging.info(f"Iniciando benchmark para {total_rows} casos de prueba desde el archivo: {file_path}")
72
-
73
- for index, row in df.iterrows():
74
- status = 'OK'
75
- error_msg = ''
76
- answer = ''
77
- stats = {}
78
-
79
- try:
80
- username = str(row['username'])
81
- client_identity = str(row['client_identity'])
82
- prompt_name = str(row['prompt_name'])
83
- question = str(row['question'])
84
- model = str(row['model'])
85
-
86
- logging.info(
87
- f"*** Procesando caso {index + 1}/{total_rows}: client_rut='{client_identity}', prompt='{prompt_name}'")
88
-
89
- # 1. init context with user executing the test
90
- start_time = time.time()
91
- self.query_service.llm_init_context(company.short_name,
92
- external_user_id=username,
93
- model=model)
94
- context_time = time.time() - start_time
95
-
96
- # 2. prepare client data.
97
- client_data = {'client_identity': client_identity}
98
-
99
- # 3. execute the query
100
- start_time = time.time()
101
- response = self.query_service.llm_query(
102
- company_short_name=company.short_name,
103
- prompt_name=prompt_name,
104
- question=question,
105
- external_user_id=username,
106
- client_data=client_data
107
- )
108
- gpt_time = time.time() - start_time
109
-
110
- # 4. process the response
111
- if response.get('error') or not response.get('valid_response'):
112
- status = 'FAILED'
113
- error_msg = response.get('error_message', 'Error desconocido en la respuesta.')
114
- else:
115
- answer = response.get('answer', '')
116
- stats = response.get('stats', {})
117
-
118
- query_id = response.get('query_id', 0)
119
-
120
- except Exception as e:
121
- status = 'FAILED'
122
- error_msg = f"Excepción durante la ejecución: {type(e).__name__} - {str(e)}"
123
- logging.error(f"Fallo en el caso {index + 1}: {error_msg}")
124
-
125
- finally:
126
- self._update_results_row(df, index,
127
- status=status,
128
- context_time=context_time,
129
- gpt_time=gpt_time,
130
- answer=answer,
131
- error_msg=error_msg,
132
- stats=stats,
133
- query_id=query_id)
134
-
135
- output_filename = file_path.replace('.xlsx', '_results.xlsx')
136
- df.to_excel(output_filename, index=False)
137
- logging.info(f"Benchmark finalizado. Resultados guardados en: {output_filename}")
138
-
139
- return output_filename
File without changes
File without changes
File without changes