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.
- {iatoolkit-2.51.1/src/iatoolkit.egg-info → iatoolkit-2.51.3}/PKG-INFO +1 -5
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/pyproject.toml +4 -4
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/__init__.py +1 -1
- iatoolkit-2.51.3/src/iatoolkit/common/text_splitter.py +170 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/core.py +0 -2
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/knowledge_base_service.py +4 -3
- {iatoolkit-2.51.1 → iatoolkit-2.51.3/src/iatoolkit.egg-info}/PKG-INFO +1 -5
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit.egg-info/SOURCES.txt +1 -1
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit.egg-info/requires.txt +0 -4
- iatoolkit-2.51.1/src/iatoolkit/services/benchmark_service.py +0 -139
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/LICENSE +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/LICENSE_COMMUNITY.md +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/readme.md +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/setup.cfg +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/base_company.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/cli_commands.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/__init__.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/bridge_validation.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/exceptions.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/__init__.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/model_registry.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/routes.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/secret_resolver.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/session_manager.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/url_safety.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/util.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/company_registry.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/__init__.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/__init__.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/call_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/connectors/__init__.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/google_auth_client.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/google_chat_app.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/inference_handler.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_proxy.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/llm_response.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/redis_session_manager.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/locales/en.yaml +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/locales/es.yaml +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/__init__.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/api_key_repo.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/bridge_repo.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/database_manager.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/document_repo.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/memory_repo.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/models.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/profile_repo.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/repositories/vs_repo.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/runtime_logging.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/__init__.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/api_key_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/attachment_policy_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/auth_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/branding_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/company_context_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/configuration_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/context_builder_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/dispatcher_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/embedding_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/excel_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/file_processor_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/history_manager_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/http_tool_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/i18n_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/inference_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/jwt_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/language_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/license_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/llm_client_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/mail_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/mcp_token_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/memory_compiler_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/memory_lint_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/memory_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/memory_wiki_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/operator_identity_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/__init__.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/contracts.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/parsers/validator.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/pdf_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/profile_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/prompt_resource_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/prompt_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/query_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/sql_dataset_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/sql_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/sql_source_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/storage_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/structured_output_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/system_tools.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/telemetry_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/tool_output_contract.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/tool_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/user_feedback_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/user_session_context_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/visual_kb_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/visual_tool_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/warmup_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/web_search/__init__.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/services/web_search_service.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/images/fernando.jpeg +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_filepond.js +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_help_content.js +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_history_button.js +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_main.js +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/styles/chat_modal.css +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/styles/chat_public.css +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/styles/documents.css +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/styles/landing_page.css +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/styles/llm_output.css +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/static/styles/onboarding.css +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/_company_header.html +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/_login_widget.html +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/account.html +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/base.html +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/change_password.html +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/chat.html +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/chat_modals.html +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/error.html +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/forgot_password.html +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/home_hosted_default.html +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/onboarding_shell.html +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/pdf/base.html +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/pdf/letter.html +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/pdf/report.html +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/pdf/simple.html +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/templates/signup.html +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/__init__.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/account_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/api_key_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/base_login_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/categories_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/change_password_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/chat_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/configuration_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/connectors_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/embedding_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/forgot_password_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/help_content_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/history_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/home_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/init_context_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/llmquery_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/load_document_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/login_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/logout_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/memory_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/profile_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/prompt_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/rag_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/root_redirect_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/signup_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/static_page_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/tool_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/users_api_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/views/verify_user_view.py +0 -0
- {iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
- {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.
|
|
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
|
-
|
|
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",
|
|
@@ -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
|
|
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
|
-
#
|
|
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
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py
RENAMED
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/memory_lint_trigger.py
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/signup_policy_resolver.py
RENAMED
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/common/interfaces/web_search_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/core_identity.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/email_output.prompt
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/format_styles.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/html_structures.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/links_documents.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/memory_usage.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/output_basics.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_casting.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/connectors/file_connector_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/connectors/google_drive_connector.py
RENAMED
|
File without changes
|
{iatoolkit-2.51.1 → iatoolkit-2.51.3}/src/iatoolkit/infra/connectors/local_file_connector.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|