iatoolkit 2.42.2__tar.gz → 2.44.0__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.42.2/src/iatoolkit.egg-info → iatoolkit-2.44.0}/PKG-INFO +7 -2
- iatoolkit-2.44.0/pyproject.toml +64 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/requirements.txt +3 -1
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/__init__.py +1 -1
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/inference_embeddings_client.py +16 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/inference_handler.py +25 -5
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/jina_embeddings_client.py +17 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/embedding_service.py +155 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0/src/iatoolkit.egg-info}/PKG-INFO +7 -2
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit.egg-info/requires.txt +8 -1
- iatoolkit-2.42.2/pyproject.toml +0 -32
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/LICENSE +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/LICENSE_COMMUNITY.md +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/readme.md +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/setup.cfg +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/base_company.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/cli_commands.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/__init__.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/bridge_validation.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/exceptions.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/interfaces/__init__.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/model_registry.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/routes.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/secret_resolver.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/session_manager.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/util.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/company_registry.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/__init__.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/core.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/__init__.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/call_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/connectors/__init__.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/google_auth_client.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/google_chat_app.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/llm_proxy.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/llm_response.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/redis_session_manager.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/locales/en.yaml +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/locales/es.yaml +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/repositories/__init__.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/repositories/api_key_repo.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/repositories/bridge_repo.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/repositories/database_manager.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/repositories/document_repo.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/repositories/memory_repo.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/repositories/models.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/repositories/profile_repo.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/repositories/vs_repo.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/runtime_logging.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/__init__.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/api_key_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/attachment_policy_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/auth_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/benchmark_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/branding_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/company_context_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/configuration_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/context_builder_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/dispatcher_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/excel_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/file_processor_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/history_manager_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/http_tool_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/i18n_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/inference_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/jwt_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/knowledge_base_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/language_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/license_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/llm_client_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/mail_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/mcp_token_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/memory_compiler_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/memory_lint_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/memory_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/memory_wiki_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/parsers/__init__.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/parsers/contracts.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/parsers/validator.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/pdf_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/profile_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/prompt_resource_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/prompt_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/query_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/sql_dataset_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/sql_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/sql_source_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/storage_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/structured_output_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/system_tools.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/telemetry_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/tool_output_contract.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/tool_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/user_feedback_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/user_session_context_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/visual_kb_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/visual_tool_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/warmup_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/web_search/__init__.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/services/web_search_service.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/images/fernando.jpeg +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/js/chat_filepond.js +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/js/chat_help_content.js +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/js/chat_history_button.js +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/js/chat_main.js +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/styles/chat_modal.css +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/styles/chat_public.css +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/styles/documents.css +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/styles/landing_page.css +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/styles/llm_output.css +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/static/styles/onboarding.css +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/_company_header.html +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/_login_widget.html +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/account.html +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/base.html +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/change_password.html +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/chat.html +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/chat_modals.html +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/error.html +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/forgot_password.html +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/home_hosted_default.html +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/onboarding_shell.html +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/pdf/base.html +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/pdf/letter.html +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/pdf/report.html +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/pdf/simple.html +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/templates/signup.html +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/__init__.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/account_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/api_key_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/base_login_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/categories_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/change_password_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/chat_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/configuration_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/connectors_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/embedding_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/forgot_password_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/help_content_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/history_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/home_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/init_context_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/llmquery_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/load_document_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/login_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/logout_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/memory_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/profile_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/prompt_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/rag_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/root_redirect_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/signup_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/static_page_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/tool_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/users_api_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/views/verify_user_view.py +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
- {iatoolkit-2.42.2 → iatoolkit-2.44.0}/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
|
+
Version: 2.44.0
|
|
4
4
|
Summary: IAToolkit
|
|
5
5
|
Author: Fernando Libedinsky
|
|
6
6
|
License-Expression: MIT
|
|
@@ -31,7 +31,7 @@ Requires-Dist: google-auth-httplib2==0.2.0
|
|
|
31
31
|
Requires-Dist: google-auth-oauthlib==1.2.1
|
|
32
32
|
Requires-Dist: google-cloud-core==2.4.1
|
|
33
33
|
Requires-Dist: google-cloud-storage==3.0.0
|
|
34
|
-
Requires-Dist: google-crc32c==1.
|
|
34
|
+
Requires-Dist: google-crc32c==1.8.0
|
|
35
35
|
Requires-Dist: google-genai==1.57.0
|
|
36
36
|
Requires-Dist: google-resumable-media==2.7.2
|
|
37
37
|
Requires-Dist: googleapis-common-protos==1.66.0
|
|
@@ -88,6 +88,11 @@ Requires-Dist: Werkzeug==3.1.3
|
|
|
88
88
|
Requires-Dist: pyjwt[crypto]>=2.8.0
|
|
89
89
|
Provides-Extra: docling
|
|
90
90
|
Requires-Dist: docling==2.72.0; extra == "docling"
|
|
91
|
+
Provides-Extra: ocr
|
|
92
|
+
Requires-Dist: pytesseract==0.3.13; extra == "ocr"
|
|
93
|
+
Provides-Extra: inference
|
|
94
|
+
Requires-Dist: torch==2.10.0; extra == "inference"
|
|
95
|
+
Requires-Dist: diffusers==0.39.0; extra == "inference"
|
|
91
96
|
Dynamic: license-file
|
|
92
97
|
|
|
93
98
|
# 🧠 IAToolkit — Open-Source Framework for Real-World AI Assistants
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68", "wheel", "build"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "iatoolkit"
|
|
7
|
+
dynamic = ["version", "dependencies"]
|
|
8
|
+
requires-python = ">=3.12"
|
|
9
|
+
description = "IAToolkit"
|
|
10
|
+
readme = "readme.md"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
authors = [{ name = "Fernando Libedinsky" }]
|
|
13
|
+
|
|
14
|
+
# Capabilities that carry a heavy dependency and that most deployments never
|
|
15
|
+
# turn on. Each of these was already being installed by hand into whatever
|
|
16
|
+
# environment happened to need it, which is why a clean install could not run
|
|
17
|
+
# the whole suite: nothing declared them, so nothing could install them on
|
|
18
|
+
# purpose. Declared here, `pip install iatoolkit[ocr]` is a decision instead of
|
|
19
|
+
# a memory.
|
|
20
|
+
[project.optional-dependencies]
|
|
21
|
+
# Parsing a document with the Docling pipeline rather than the basic provider.
|
|
22
|
+
docling = [
|
|
23
|
+
"docling==2.72.0",
|
|
24
|
+
]
|
|
25
|
+
# Reading a scanned PDF. This extra is NOT enough to do OCR: pytesseract only
|
|
26
|
+
# shells out to the tesseract binary, which pip cannot install. All three of
|
|
27
|
+
# these have to be true, and `_get_tesseract_status()` checks them in order:
|
|
28
|
+
#
|
|
29
|
+
# 1. TESSERACT_ENABLED=true — off by default, so this extra alone
|
|
30
|
+
# changes nothing at runtime
|
|
31
|
+
# 2. this extra installed — the only gate pip covers
|
|
32
|
+
# 3. apt-get install tesseract-ocr tesseract-ocr-spa
|
|
33
|
+
# — the binary, and the Spanish data pack,
|
|
34
|
+
# because the call is image_to_string(lang="spa")
|
|
35
|
+
#
|
|
36
|
+
# Render's native Python runtime ships neither of the two system packages.
|
|
37
|
+
# Installed in CI because the two OCR assertions in test_document_service.py
|
|
38
|
+
# fake gates 1 and 3 but import pytesseract for real.
|
|
39
|
+
ocr = [
|
|
40
|
+
"pytesseract==0.3.13",
|
|
41
|
+
]
|
|
42
|
+
# Running a model locally in `infra/inference_handler`, which imports both of
|
|
43
|
+
# these at module level. Nothing in the source loads that module today — only
|
|
44
|
+
# its own test does, by importlib — so treat these pins as untested: no code
|
|
45
|
+
# path has exercised diffusers at any version.
|
|
46
|
+
inference = [
|
|
47
|
+
"torch==2.10.0",
|
|
48
|
+
"diffusers==0.39.0",
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
[tool.setuptools]
|
|
52
|
+
package-dir = {"" = "src"}
|
|
53
|
+
|
|
54
|
+
[tool.setuptools.packages.find]
|
|
55
|
+
where = ["src"]
|
|
56
|
+
exclude = ["tests*", "*/tests*"]
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
[tool.setuptools.dynamic]
|
|
60
|
+
version = { attr = "iatoolkit.__version__" }
|
|
61
|
+
dependencies = { file = ["requirements.txt"] }
|
|
62
|
+
|
|
63
|
+
[tool.setuptools.package-data]
|
|
64
|
+
iatoolkit = ["templates/**/*", "static/**/*", "locales/*.yaml", "config/*.yaml", "config/system_prompts/*.prompt"]
|
|
@@ -21,7 +21,9 @@ google-auth-httplib2==0.2.0
|
|
|
21
21
|
google-auth-oauthlib==1.2.1
|
|
22
22
|
google-cloud-core==2.4.1
|
|
23
23
|
google-cloud-storage==3.0.0
|
|
24
|
-
|
|
24
|
+
# 1.6.0 publishes no cp313 wheel. This was the only pin in the whole
|
|
25
|
+
# dependency set that Python 3.13 required moving.
|
|
26
|
+
google-crc32c==1.8.0
|
|
25
27
|
google-genai==1.57.0
|
|
26
28
|
google-resumable-media==2.7.2
|
|
27
29
|
googleapis-common-protos==1.66.0
|
|
@@ -37,5 +37,21 @@ class InferenceEmbeddingsClient:
|
|
|
37
37
|
except Exception as e:
|
|
38
38
|
raise RuntimeError(f"Error generando embedding con InferenceClient: {e}")
|
|
39
39
|
|
|
40
|
+
def get_embeddings(self, texts: List[str]) -> List[List[float]]:
|
|
41
|
+
"""Embed a batch in one call. feature_extraction accepts a list and
|
|
42
|
+
returns one row per input; the single-text path already handled that shape."""
|
|
43
|
+
try:
|
|
44
|
+
embeddings = self.client.feature_extraction(list(texts))
|
|
45
|
+
if hasattr(embeddings, "tolist"):
|
|
46
|
+
embeddings = embeddings.tolist()
|
|
47
|
+
if not isinstance(embeddings, list) or len(embeddings) != len(texts):
|
|
48
|
+
raise RuntimeError(
|
|
49
|
+
f"feature_extraction returned {len(embeddings) if isinstance(embeddings, list) else 'no'} "
|
|
50
|
+
f"rows for {len(texts)} inputs."
|
|
51
|
+
)
|
|
52
|
+
return embeddings
|
|
53
|
+
except Exception as e:
|
|
54
|
+
raise RuntimeError(f"Error generando embeddings en lote con InferenceClient: {e}")
|
|
55
|
+
|
|
40
56
|
def get_image_embedding(self, presigned_url: Optional[str] = None, image_bytes: Optional[bytes] = None) -> List[float]:
|
|
41
57
|
raise NotImplementedError("Image embedding not implemented for this client.")
|
|
@@ -192,12 +192,29 @@ class EndpointHandler:
|
|
|
192
192
|
return {"embedding": vec}
|
|
193
193
|
|
|
194
194
|
def _handle_text_embedding(self, inputs: dict) -> dict:
|
|
195
|
-
text
|
|
196
|
-
|
|
197
|
-
|
|
195
|
+
"""Embed one text or a batch, in the order received.
|
|
196
|
+
|
|
197
|
+
``inputs.text`` (str) returns ``{"embedding": [...]}`` and ``inputs.texts``
|
|
198
|
+
(list) returns ``{"embeddings": [[...], ...]}``. Both shapes are answered so
|
|
199
|
+
an endpoint running this handler stays compatible with callers that predate
|
|
200
|
+
batching. The pooling below was already batch-shaped — it computed (B, D) and
|
|
201
|
+
returned row 0 — so the batch path is the same maths without the slice.
|
|
202
|
+
"""
|
|
203
|
+
texts = inputs.get("texts")
|
|
204
|
+
batched = texts is not None
|
|
205
|
+
if batched:
|
|
206
|
+
if not isinstance(texts, list) or not texts:
|
|
207
|
+
raise ValueError("Expected inputs.texts to be a non-empty list of strings.")
|
|
208
|
+
if any(not isinstance(item, str) or not item.strip() for item in texts):
|
|
209
|
+
raise ValueError("Every entry in inputs.texts must be a non-empty string.")
|
|
210
|
+
else:
|
|
211
|
+
text = inputs.get("text")
|
|
212
|
+
if not isinstance(text, str) or not text.strip():
|
|
213
|
+
raise ValueError("Expected inputs.text for text embedding generation.")
|
|
214
|
+
texts = [text]
|
|
198
215
|
|
|
199
216
|
encoded_input = self.processor_instance(
|
|
200
|
-
|
|
217
|
+
texts,
|
|
201
218
|
padding=True,
|
|
202
219
|
truncation=True,
|
|
203
220
|
return_tensors='pt'
|
|
@@ -213,7 +230,10 @@ class EndpointHandler:
|
|
|
213
230
|
min=1e-9
|
|
214
231
|
)
|
|
215
232
|
sentence_embeddings = torch.nn.functional.normalize(sentence_embeddings, p=2, dim=1)
|
|
216
|
-
|
|
233
|
+
vectors = sentence_embeddings.cpu().tolist()
|
|
234
|
+
if batched:
|
|
235
|
+
return {"embeddings": vectors}
|
|
236
|
+
return {"embedding": vectors[0]}
|
|
217
237
|
|
|
218
238
|
# Backward-compatible alias: existing tests/callers may still refer to _handle_minilm
|
|
219
239
|
def _handle_minilm(self, inputs: dict) -> dict:
|
|
@@ -36,6 +36,23 @@ class JinaEmbeddingsClient:
|
|
|
36
36
|
response = self._post(payload)
|
|
37
37
|
return response["data"][0]["embedding"]
|
|
38
38
|
|
|
39
|
+
def get_embeddings(self, texts: List[str]) -> List[List[float]]:
|
|
40
|
+
"""Embed a batch in one request. The API already took a list; this uses it."""
|
|
41
|
+
payload = {
|
|
42
|
+
"model": self.model,
|
|
43
|
+
"normalized": self.normalized,
|
|
44
|
+
"embedding_type": "float",
|
|
45
|
+
"input": list(texts),
|
|
46
|
+
}
|
|
47
|
+
response = self._post(payload)
|
|
48
|
+
data = response["data"]
|
|
49
|
+
if len(data) != len(texts):
|
|
50
|
+
raise ValueError(f"Jina returned {len(data)} embeddings for {len(texts)} inputs.")
|
|
51
|
+
# Sort by the API's own index rather than trusting arrival order: a silent
|
|
52
|
+
# reordering would attach each vector to the wrong text.
|
|
53
|
+
ordered = sorted(data, key=lambda item: item.get("index", 0))
|
|
54
|
+
return [item["embedding"] for item in ordered]
|
|
55
|
+
|
|
39
56
|
def get_image_embedding(self,
|
|
40
57
|
presigned_url: Optional[str] = None,
|
|
41
58
|
image_bytes: Optional[bytes] = None
|
|
@@ -34,6 +34,22 @@ class EmbeddingClientWrapper:
|
|
|
34
34
|
"""Generates and returns an embedding for the given text."""
|
|
35
35
|
raise NotImplementedError
|
|
36
36
|
|
|
37
|
+
def get_embeddings(self, texts: list[str], suppress_error_logging: bool = False) -> list[list[float]]:
|
|
38
|
+
"""Embeds several texts, returning one vector per input in the same order.
|
|
39
|
+
|
|
40
|
+
The default walks the single-text path so every provider works without
|
|
41
|
+
changes; wrappers whose backend accepts a list override this with one
|
|
42
|
+
request per batch. Callers must not assume a single round trip.
|
|
43
|
+
"""
|
|
44
|
+
return [
|
|
45
|
+
self.get_embedding(text, suppress_error_logging=suppress_error_logging)
|
|
46
|
+
for text in texts
|
|
47
|
+
]
|
|
48
|
+
|
|
49
|
+
def supports_batching(self) -> bool:
|
|
50
|
+
"""Whether get_embeddings issues one request per batch instead of per text."""
|
|
51
|
+
return False
|
|
52
|
+
|
|
37
53
|
def get_image_embedding(self,
|
|
38
54
|
presigned_url: Optional[str] = None,
|
|
39
55
|
image_bytes: Optional[bytes] = None
|
|
@@ -71,6 +87,39 @@ class HuggingFaceClientWrapper(EmbeddingClientWrapper):
|
|
|
71
87
|
)
|
|
72
88
|
return result["embedding"]
|
|
73
89
|
|
|
90
|
+
def supports_batching(self) -> bool:
|
|
91
|
+
# Opt-in per tool: an endpoint still running a handler that predates
|
|
92
|
+
# inputs.texts would reject the batch payload, so this stays off until the
|
|
93
|
+
# deployment is confirmed via `supports_batch_embedding: true`.
|
|
94
|
+
return bool(self._tool_config().get("supports_batch_embedding"))
|
|
95
|
+
|
|
96
|
+
def _tool_config(self) -> dict:
|
|
97
|
+
try:
|
|
98
|
+
return self.inference_service._get_tool_config(self.company_short_name, self.tool_name) or {}
|
|
99
|
+
except Exception:
|
|
100
|
+
logging.debug("Could not read inference tool config for batching.", exc_info=True)
|
|
101
|
+
return {}
|
|
102
|
+
|
|
103
|
+
def get_embeddings(self, texts: list[str], suppress_error_logging: bool = False) -> list[list[float]]:
|
|
104
|
+
if not self.supports_batching():
|
|
105
|
+
return super().get_embeddings(texts, suppress_error_logging=suppress_error_logging)
|
|
106
|
+
|
|
107
|
+
result = self.inference_service.predict(
|
|
108
|
+
self.company_short_name,
|
|
109
|
+
self.tool_name,
|
|
110
|
+
{"mode": "text", "texts": list(texts)},
|
|
111
|
+
suppress_error_logging=suppress_error_logging,
|
|
112
|
+
)
|
|
113
|
+
embeddings = result.get("embeddings")
|
|
114
|
+
if not isinstance(embeddings, list) or len(embeddings) != len(texts):
|
|
115
|
+
# A silent length mismatch would pair each text with the wrong vector,
|
|
116
|
+
# which no downstream check would catch. Fail instead.
|
|
117
|
+
raise ValueError(
|
|
118
|
+
f"Batch embedding returned {len(embeddings) if isinstance(embeddings, list) else 'no'} "
|
|
119
|
+
f"vectors for {len(texts)} inputs."
|
|
120
|
+
)
|
|
121
|
+
return embeddings
|
|
122
|
+
|
|
74
123
|
def get_image_embedding(self,
|
|
75
124
|
presigned_url: Optional[str] = None,
|
|
76
125
|
image_bytes: Optional[bytes] = None
|
|
@@ -129,6 +178,24 @@ class OpenAIClientWrapper(EmbeddingClientWrapper):
|
|
|
129
178
|
response = self.client.embeddings.create(**kwargs)
|
|
130
179
|
return response.data[0].embedding
|
|
131
180
|
|
|
181
|
+
def supports_batching(self) -> bool:
|
|
182
|
+
return True
|
|
183
|
+
|
|
184
|
+
def get_embeddings(self, texts: list[str], suppress_error_logging: bool = False) -> list[list[float]]:
|
|
185
|
+
kwargs = {
|
|
186
|
+
"input": [text.replace("\n", " ") for text in texts],
|
|
187
|
+
"model": self.model,
|
|
188
|
+
}
|
|
189
|
+
if self.dimensions is not None:
|
|
190
|
+
kwargs["dimensions"] = self.dimensions
|
|
191
|
+
response = self.client.embeddings.create(**kwargs)
|
|
192
|
+
# The API documents input order, but pairing the wrong vector to a text is
|
|
193
|
+
# invisible downstream, so sort by index rather than trusting arrival order.
|
|
194
|
+
ordered = sorted(response.data, key=lambda item: item.index)
|
|
195
|
+
if len(ordered) != len(texts):
|
|
196
|
+
raise ValueError(f"Batch embedding returned {len(ordered)} vectors for {len(texts)} inputs.")
|
|
197
|
+
return [item.embedding for item in ordered]
|
|
198
|
+
|
|
132
199
|
class CustomClassClientWrapper(EmbeddingClientWrapper):
|
|
133
200
|
"""
|
|
134
201
|
Adapter for custom embedding classes defined by the user.
|
|
@@ -151,6 +218,20 @@ class CustomClassClientWrapper(EmbeddingClientWrapper):
|
|
|
151
218
|
return embedding[0]
|
|
152
219
|
return embedding
|
|
153
220
|
|
|
221
|
+
def supports_batching(self) -> bool:
|
|
222
|
+
return hasattr(self.client, "get_embeddings")
|
|
223
|
+
|
|
224
|
+
def get_embeddings(self, texts: list[str], suppress_error_logging: bool = False) -> list[list[float]]:
|
|
225
|
+
if not self.supports_batching():
|
|
226
|
+
return super().get_embeddings(texts, suppress_error_logging=suppress_error_logging)
|
|
227
|
+
embeddings = self.client.get_embeddings(list(texts))
|
|
228
|
+
if not isinstance(embeddings, list) or len(embeddings) != len(texts):
|
|
229
|
+
raise ValueError(
|
|
230
|
+
f"Batch embedding returned {len(embeddings) if isinstance(embeddings, list) else 'no'} "
|
|
231
|
+
f"vectors for {len(texts)} inputs."
|
|
232
|
+
)
|
|
233
|
+
return embeddings
|
|
234
|
+
|
|
154
235
|
def get_image_embedding(self,
|
|
155
236
|
presigned_url: Optional[str] = None,
|
|
156
237
|
image_bytes: Optional[bytes] = None
|
|
@@ -504,6 +585,80 @@ class EmbeddingService:
|
|
|
504
585
|
logging.error(f"Error generating embedding for text: {text[:80]}... - {e}")
|
|
505
586
|
raise
|
|
506
587
|
|
|
588
|
+
# Batch defaults: 32 texts is a good round trip for short records, and the
|
|
589
|
+
# character budget guards against a few long findings blowing the payload.
|
|
590
|
+
DEFAULT_EMBED_BATCH_SIZE = 32
|
|
591
|
+
DEFAULT_EMBED_BATCH_MAX_CHARS = 40000
|
|
592
|
+
|
|
593
|
+
def embed_texts(
|
|
594
|
+
self,
|
|
595
|
+
company_short_name: str,
|
|
596
|
+
texts: list[str],
|
|
597
|
+
model_type: str = 'text',
|
|
598
|
+
batch_size: Optional[int] = None,
|
|
599
|
+
max_chars_per_batch: Optional[int] = None,
|
|
600
|
+
suppress_error_logging: bool = False,
|
|
601
|
+
) -> list[list[float]]:
|
|
602
|
+
"""Embed many texts, returning one vector per input in the same order.
|
|
603
|
+
|
|
604
|
+
Resolves the company and the client once instead of once per text, and
|
|
605
|
+
sends batches when the provider supports them. If a batch fails, its
|
|
606
|
+
texts are retried one by one so a single bad input cannot lose the rest.
|
|
607
|
+
"""
|
|
608
|
+
if not texts:
|
|
609
|
+
return []
|
|
610
|
+
|
|
611
|
+
company = self.profile_repo.get_company_by_short_name(company_short_name)
|
|
612
|
+
if not company:
|
|
613
|
+
raise ValueError(self.i18n_service.t('errors.company_not_found', company_short_name=company_short_name))
|
|
614
|
+
client_wrapper = self.client_factory.get_client(company_short_name, model_type)
|
|
615
|
+
|
|
616
|
+
size = int(batch_size or self.DEFAULT_EMBED_BATCH_SIZE)
|
|
617
|
+
char_budget = int(max_chars_per_batch or self.DEFAULT_EMBED_BATCH_MAX_CHARS)
|
|
618
|
+
embeddings: list[list[float]] = []
|
|
619
|
+
for batch in self._chunk_texts(texts, size=size, char_budget=char_budget):
|
|
620
|
+
embeddings.extend(
|
|
621
|
+
self._embed_batch(
|
|
622
|
+
client_wrapper,
|
|
623
|
+
batch,
|
|
624
|
+
suppress_error_logging=suppress_error_logging,
|
|
625
|
+
)
|
|
626
|
+
)
|
|
627
|
+
if len(embeddings) != len(texts):
|
|
628
|
+
raise ValueError(f"Embedded {len(embeddings)} vectors for {len(texts)} texts.")
|
|
629
|
+
return embeddings
|
|
630
|
+
|
|
631
|
+
def _embed_batch(self, client_wrapper, batch: list[str], *, suppress_error_logging: bool) -> list[list[float]]:
|
|
632
|
+
try:
|
|
633
|
+
return client_wrapper.get_embeddings(batch, suppress_error_logging=suppress_error_logging)
|
|
634
|
+
except Exception as error:
|
|
635
|
+
if len(batch) == 1 or not client_wrapper.supports_batching():
|
|
636
|
+
raise
|
|
637
|
+
logging.warning(
|
|
638
|
+
"Batch embedding of %s texts failed (%s); retrying them individually.",
|
|
639
|
+
len(batch),
|
|
640
|
+
error,
|
|
641
|
+
)
|
|
642
|
+
return [
|
|
643
|
+
client_wrapper.get_embedding(text, suppress_error_logging=suppress_error_logging)
|
|
644
|
+
for text in batch
|
|
645
|
+
]
|
|
646
|
+
|
|
647
|
+
@staticmethod
|
|
648
|
+
def _chunk_texts(texts: list[str], *, size: int, char_budget: int):
|
|
649
|
+
"""Split by count and by characters, so a few long texts do not oversize a batch."""
|
|
650
|
+
batch: list[str] = []
|
|
651
|
+
batch_chars = 0
|
|
652
|
+
for text in texts:
|
|
653
|
+
length = len(text or "")
|
|
654
|
+
if batch and (len(batch) >= size or batch_chars + length > char_budget):
|
|
655
|
+
yield batch
|
|
656
|
+
batch, batch_chars = [], 0
|
|
657
|
+
batch.append(text)
|
|
658
|
+
batch_chars += length
|
|
659
|
+
if batch:
|
|
660
|
+
yield batch
|
|
661
|
+
|
|
507
662
|
def embed_image(self, company_short_name: str,
|
|
508
663
|
presigned_url: Optional[str] = None,
|
|
509
664
|
image_bytes: Optional[bytes] = None) -> list[float]:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: iatoolkit
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.44.0
|
|
4
4
|
Summary: IAToolkit
|
|
5
5
|
Author: Fernando Libedinsky
|
|
6
6
|
License-Expression: MIT
|
|
@@ -31,7 +31,7 @@ Requires-Dist: google-auth-httplib2==0.2.0
|
|
|
31
31
|
Requires-Dist: google-auth-oauthlib==1.2.1
|
|
32
32
|
Requires-Dist: google-cloud-core==2.4.1
|
|
33
33
|
Requires-Dist: google-cloud-storage==3.0.0
|
|
34
|
-
Requires-Dist: google-crc32c==1.
|
|
34
|
+
Requires-Dist: google-crc32c==1.8.0
|
|
35
35
|
Requires-Dist: google-genai==1.57.0
|
|
36
36
|
Requires-Dist: google-resumable-media==2.7.2
|
|
37
37
|
Requires-Dist: googleapis-common-protos==1.66.0
|
|
@@ -88,6 +88,11 @@ Requires-Dist: Werkzeug==3.1.3
|
|
|
88
88
|
Requires-Dist: pyjwt[crypto]>=2.8.0
|
|
89
89
|
Provides-Extra: docling
|
|
90
90
|
Requires-Dist: docling==2.72.0; extra == "docling"
|
|
91
|
+
Provides-Extra: ocr
|
|
92
|
+
Requires-Dist: pytesseract==0.3.13; extra == "ocr"
|
|
93
|
+
Provides-Extra: inference
|
|
94
|
+
Requires-Dist: torch==2.10.0; extra == "inference"
|
|
95
|
+
Requires-Dist: diffusers==0.39.0; extra == "inference"
|
|
91
96
|
Dynamic: license-file
|
|
92
97
|
|
|
93
98
|
# 🧠 IAToolkit — Open-Source Framework for Real-World AI Assistants
|
|
@@ -21,7 +21,7 @@ google-auth-httplib2==0.2.0
|
|
|
21
21
|
google-auth-oauthlib==1.2.1
|
|
22
22
|
google-cloud-core==2.4.1
|
|
23
23
|
google-cloud-storage==3.0.0
|
|
24
|
-
google-crc32c==1.
|
|
24
|
+
google-crc32c==1.8.0
|
|
25
25
|
google-genai==1.57.0
|
|
26
26
|
google-resumable-media==2.7.2
|
|
27
27
|
googleapis-common-protos==1.66.0
|
|
@@ -79,3 +79,10 @@ pyjwt[crypto]>=2.8.0
|
|
|
79
79
|
|
|
80
80
|
[docling]
|
|
81
81
|
docling==2.72.0
|
|
82
|
+
|
|
83
|
+
[inference]
|
|
84
|
+
torch==2.10.0
|
|
85
|
+
diffusers==0.39.0
|
|
86
|
+
|
|
87
|
+
[ocr]
|
|
88
|
+
pytesseract==0.3.13
|
iatoolkit-2.42.2/pyproject.toml
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
[build-system]
|
|
2
|
-
requires = ["setuptools>=68", "wheel", "build"]
|
|
3
|
-
build-backend = "setuptools.build_meta"
|
|
4
|
-
|
|
5
|
-
[project]
|
|
6
|
-
name = "iatoolkit"
|
|
7
|
-
dynamic = ["version", "dependencies"]
|
|
8
|
-
requires-python = ">=3.12"
|
|
9
|
-
description = "IAToolkit"
|
|
10
|
-
readme = "readme.md"
|
|
11
|
-
license = "MIT"
|
|
12
|
-
authors = [{ name = "Fernando Libedinsky" }]
|
|
13
|
-
|
|
14
|
-
[project.optional-dependencies]
|
|
15
|
-
docling = [
|
|
16
|
-
"docling==2.72.0",
|
|
17
|
-
]
|
|
18
|
-
|
|
19
|
-
[tool.setuptools]
|
|
20
|
-
package-dir = {"" = "src"}
|
|
21
|
-
|
|
22
|
-
[tool.setuptools.packages.find]
|
|
23
|
-
where = ["src"]
|
|
24
|
-
exclude = ["tests*", "*/tests*"]
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
[tool.setuptools.dynamic]
|
|
28
|
-
version = { attr = "iatoolkit.__version__" }
|
|
29
|
-
dependencies = { file = ["requirements.txt"] }
|
|
30
|
-
|
|
31
|
-
[tool.setuptools.package-data]
|
|
32
|
-
iatoolkit = ["templates/**/*", "static/**/*", "locales/*.yaml", "config/*.yaml", "config/system_prompts/*.prompt"]
|
|
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.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py
RENAMED
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/interfaces/memory_lint_trigger.py
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py
RENAMED
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/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
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/core_identity.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/email_output.prompt
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/format_styles.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/html_structures.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/links_documents.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/output_basics.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/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
|
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/connectors/file_connector_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/connectors/google_drive_connector.py
RENAMED
|
File without changes
|
{iatoolkit-2.42.2 → iatoolkit-2.44.0}/src/iatoolkit/infra/connectors/local_file_connector.py
RENAMED
|
File without changes
|