iatoolkit 2.21.2__tar.gz → 2.21.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.21.2/src/iatoolkit.egg-info → iatoolkit-2.21.3}/PKG-INFO +1 -1
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/__init__.py +1 -1
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/call_service.py +55 -40
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/locales/en.yaml +4 -4
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/locales/es.yaml +4 -4
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/http_tool_service.py +113 -22
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/tool_service.py +41 -31
- {iatoolkit-2.21.2 → iatoolkit-2.21.3/src/iatoolkit.egg-info}/PKG-INFO +1 -1
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/LICENSE +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/LICENSE_COMMUNITY.md +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/pyproject.toml +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/readme.md +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/requirements.txt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/setup.cfg +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/base_company.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/cli_commands.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/__init__.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/exceptions.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/interfaces/__init__.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/model_registry.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/routes.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/secret_resolver.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/session_manager.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/util.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/company_registry.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/__init__.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/core.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/__init__.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/connectors/__init__.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/google_auth_client.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/google_chat_app.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/inference_handler.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/llm_proxy.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/llm_response.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/infra/redis_session_manager.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/repositories/__init__.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/repositories/api_key_repo.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/repositories/database_manager.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/repositories/document_repo.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/repositories/memory_repo.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/repositories/models.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/repositories/profile_repo.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/repositories/vs_repo.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/runtime_logging.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/__init__.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/api_key_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/attachment_policy_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/auth_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/benchmark_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/branding_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/company_context_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/configuration_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/context_builder_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/dispatcher_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/embedding_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/excel_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/file_processor_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/history_manager_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/i18n_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/inference_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/jwt_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/knowledge_base_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/language_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/license_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/llm_client_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/mail_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/mcp_token_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/memory_compiler_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/memory_lint_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/memory_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/memory_wiki_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/parsers/__init__.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/parsers/contracts.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/parsers/validator.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/pdf_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/profile_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/prompt_resource_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/prompt_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/query_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/sql_dataset_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/sql_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/sql_source_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/storage_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/structured_output_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/system_tools.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/telemetry_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/tool_output_contract.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/user_feedback_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/user_session_context_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/visual_kb_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/visual_tool_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/warmup_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/web_search/__init__.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/services/web_search_service.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/images/fernando.jpeg +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/js/chat_filepond.js +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/js/chat_help_content.js +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/js/chat_history_button.js +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/js/chat_main.js +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/styles/chat_modal.css +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/styles/chat_public.css +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/styles/documents.css +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/styles/landing_page.css +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/styles/llm_output.css +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/static/styles/onboarding.css +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/_company_header.html +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/_login_widget.html +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/account.html +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/base.html +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/change_password.html +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/chat.html +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/chat_modals.html +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/error.html +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/forgot_password.html +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/home_hosted_default.html +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/onboarding_shell.html +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/pdf/base.html +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/pdf/letter.html +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/pdf/report.html +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/pdf/simple.html +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/templates/signup.html +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/__init__.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/account_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/api_key_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/base_login_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/categories_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/change_password_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/chat_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/configuration_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/connectors_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/embedding_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/forgot_password_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/help_content_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/history_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/home_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/init_context_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/llmquery_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/load_document_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/login_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/logout_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/memory_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/profile_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/prompt_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/rag_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/root_redirect_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/signup_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/static_page_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/tool_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/users_api_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/views/verify_user_view.py +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit.egg-info/requires.txt +0 -0
- {iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit.egg-info/top_level.txt +0 -0
|
@@ -40,15 +40,18 @@ class CallServiceClient:
|
|
|
40
40
|
endpoint: str,
|
|
41
41
|
params: Optional[Dict[str, Any]] = None,
|
|
42
42
|
headers: Optional[Dict[str, str]] = None,
|
|
43
|
-
timeout: Union[int, float, Tuple[int, int]] = 10
|
|
43
|
+
timeout: Union[int, float, Tuple[int, int]] = 10,
|
|
44
|
+
allow_redirects: Optional[bool] = None,
|
|
44
45
|
):
|
|
45
46
|
try:
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
request_kwargs = {
|
|
48
|
+
"params": params,
|
|
49
|
+
"headers": self._merge_headers(headers),
|
|
50
|
+
"timeout": self._normalize_timeout(timeout),
|
|
51
|
+
}
|
|
52
|
+
if allow_redirects is not None:
|
|
53
|
+
request_kwargs["allow_redirects"] = allow_redirects
|
|
54
|
+
response = requests.get(endpoint, **request_kwargs)
|
|
52
55
|
except RequestException as e:
|
|
53
56
|
raise IAToolkitException(IAToolkitException.ErrorType.REQUEST_ERROR, str(e))
|
|
54
57
|
return self._deserialize_response(response)
|
|
@@ -60,17 +63,20 @@ class CallServiceClient:
|
|
|
60
63
|
data: Any = None, # Nuevo argumento para datos crudos/binarios
|
|
61
64
|
params: Optional[Dict[str, Any]] = None,
|
|
62
65
|
headers: Optional[Dict[str, str]] = None,
|
|
63
|
-
timeout: Union[int, float, Tuple[int, int]] = 10
|
|
66
|
+
timeout: Union[int, float, Tuple[int, int]] = 10,
|
|
67
|
+
allow_redirects: Optional[bool] = None,
|
|
64
68
|
):
|
|
65
69
|
try:
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
request_kwargs = {
|
|
71
|
+
"params": params,
|
|
72
|
+
"json": json_dict,
|
|
73
|
+
"data": data, # Pasamos data a requests
|
|
74
|
+
"headers": self._merge_headers(headers),
|
|
75
|
+
"timeout": self._normalize_timeout(timeout),
|
|
76
|
+
}
|
|
77
|
+
if allow_redirects is not None:
|
|
78
|
+
request_kwargs["allow_redirects"] = allow_redirects
|
|
79
|
+
response = requests.post(endpoint, **request_kwargs)
|
|
74
80
|
except RequestException as e:
|
|
75
81
|
raise IAToolkitException(IAToolkitException.ErrorType.REQUEST_ERROR, str(e))
|
|
76
82
|
|
|
@@ -82,16 +88,19 @@ class CallServiceClient:
|
|
|
82
88
|
json_dict: Optional[Dict[str, Any]] = None,
|
|
83
89
|
params: Optional[Dict[str, Any]] = None,
|
|
84
90
|
headers: Optional[Dict[str, str]] = None,
|
|
85
|
-
timeout: Union[int, float, Tuple[int, int]] = 10
|
|
91
|
+
timeout: Union[int, float, Tuple[int, int]] = 10,
|
|
92
|
+
allow_redirects: Optional[bool] = None,
|
|
86
93
|
):
|
|
87
94
|
try:
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
+
request_kwargs = {
|
|
96
|
+
"params": params,
|
|
97
|
+
"json": json_dict,
|
|
98
|
+
"headers": self._merge_headers(headers),
|
|
99
|
+
"timeout": self._normalize_timeout(timeout),
|
|
100
|
+
}
|
|
101
|
+
if allow_redirects is not None:
|
|
102
|
+
request_kwargs["allow_redirects"] = allow_redirects
|
|
103
|
+
response = requests.put(endpoint, **request_kwargs)
|
|
95
104
|
except RequestException as e:
|
|
96
105
|
raise IAToolkitException(IAToolkitException.ErrorType.REQUEST_ERROR, str(e))
|
|
97
106
|
return self._deserialize_response(response)
|
|
@@ -102,16 +111,19 @@ class CallServiceClient:
|
|
|
102
111
|
json_dict: Optional[Dict[str, Any]] = None,
|
|
103
112
|
params: Optional[Dict[str, Any]] = None,
|
|
104
113
|
headers: Optional[Dict[str, str]] = None,
|
|
105
|
-
timeout: Union[int, float, Tuple[int, int]] = 10
|
|
114
|
+
timeout: Union[int, float, Tuple[int, int]] = 10,
|
|
115
|
+
allow_redirects: Optional[bool] = None,
|
|
106
116
|
):
|
|
107
117
|
try:
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
118
|
+
request_kwargs = {
|
|
119
|
+
"params": params,
|
|
120
|
+
"json": json_dict,
|
|
121
|
+
"headers": self._merge_headers(headers),
|
|
122
|
+
"timeout": self._normalize_timeout(timeout),
|
|
123
|
+
}
|
|
124
|
+
if allow_redirects is not None:
|
|
125
|
+
request_kwargs["allow_redirects"] = allow_redirects
|
|
126
|
+
response = requests.delete(endpoint, **request_kwargs)
|
|
115
127
|
except RequestException as e:
|
|
116
128
|
raise IAToolkitException(IAToolkitException.ErrorType.REQUEST_ERROR, str(e))
|
|
117
129
|
return self._deserialize_response(response)
|
|
@@ -122,16 +134,19 @@ class CallServiceClient:
|
|
|
122
134
|
json_dict: Optional[Dict[str, Any]] = None,
|
|
123
135
|
params: Optional[Dict[str, Any]] = None,
|
|
124
136
|
headers: Optional[Dict[str, str]] = None,
|
|
125
|
-
timeout: Union[int, float, Tuple[int, int]] = 10
|
|
137
|
+
timeout: Union[int, float, Tuple[int, int]] = 10,
|
|
138
|
+
allow_redirects: Optional[bool] = None,
|
|
126
139
|
):
|
|
127
140
|
try:
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
141
|
+
request_kwargs = {
|
|
142
|
+
"params": params,
|
|
143
|
+
"json": json_dict,
|
|
144
|
+
"headers": self._merge_headers(headers),
|
|
145
|
+
"timeout": self._normalize_timeout(timeout),
|
|
146
|
+
}
|
|
147
|
+
if allow_redirects is not None:
|
|
148
|
+
request_kwargs["allow_redirects"] = allow_redirects
|
|
149
|
+
response = requests.patch(endpoint, **request_kwargs)
|
|
135
150
|
except RequestException as e:
|
|
136
151
|
raise IAToolkitException(IAToolkitException.ErrorType.REQUEST_ERROR, str(e))
|
|
137
152
|
return self._deserialize_response(response)
|
|
@@ -1613,15 +1613,15 @@ ui:
|
|
|
1613
1613
|
parameters_help_btn_title: "Show parameters YAML format"
|
|
1614
1614
|
http_config_title: "HTTP execution_config"
|
|
1615
1615
|
http_config_help_btn_title: "Show HTTP execution_config YAML format"
|
|
1616
|
-
http_config_hint: "Required for HTTP tools. Minimum: version: 1, request.method, request.url (HTTPS)."
|
|
1616
|
+
http_config_hint: "Required for HTTP tools. Minimum: version: 1, request.method, request.url (HTTPS by default; HTTP only with private-network opt-in)."
|
|
1617
1617
|
modal_name_placeholder: "e.g. calculate_tax"
|
|
1618
1618
|
modal_http_method_label: "HTTP method"
|
|
1619
|
-
modal_http_url_label: "HTTPS URL"
|
|
1619
|
+
modal_http_url_label: "HTTP/HTTPS URL"
|
|
1620
1620
|
modal_http_url_placeholder: "https://api.example.com/resource"
|
|
1621
1621
|
parameters_help_title: "Parameters YAML format"
|
|
1622
1622
|
parameters_help_description: "Define tool input parameters as a JSON Schema object serialized in YAML."
|
|
1623
1623
|
http_config_help_title: "HTTP execution_config YAML format"
|
|
1624
|
-
http_config_help_description: "Use version: 1 and define request/auth/response. Keep URLs as absolute HTTPS."
|
|
1624
|
+
http_config_help_description: "Use version: 1 and define request/auth/response. Keep URLs as absolute HTTPS unless private-network access is explicitly enabled."
|
|
1625
1625
|
http_config_help_get_example: "GET example"
|
|
1626
1626
|
http_config_help_post_example: "POST example (Bearer from secrets_manager)"
|
|
1627
1627
|
output_contract_title: "Output Contract"
|
|
@@ -2591,7 +2591,7 @@ js_messages:
|
|
|
2591
2591
|
tool_http_execution_config_version: "execution_config.version must be 1"
|
|
2592
2592
|
tool_http_execution_config_request_required: "execution_config.request is required"
|
|
2593
2593
|
tool_http_request_method_invalid: "request.method must be one of GET, POST, PUT, PATCH, DELETE"
|
|
2594
|
-
tool_http_request_url_invalid: "request.url must be an absolute HTTPS URL"
|
|
2594
|
+
tool_http_request_url_invalid: "request.url must be an absolute HTTPS URL unless private-network access is explicitly enabled"
|
|
2595
2595
|
tool_http_request_timeout_invalid: "request.timeout_ms must be an integer between 1 and 120000"
|
|
2596
2596
|
tool_http_request_field_object: "request.{field} must be an object"
|
|
2597
2597
|
tool_http_request_body_object: "request.body must be an object"
|
|
@@ -1617,15 +1617,15 @@ ui:
|
|
|
1617
1617
|
parameters_help_btn_title: "Mostrar formato YAML de parámetros"
|
|
1618
1618
|
http_config_title: "execution_config HTTP"
|
|
1619
1619
|
http_config_help_btn_title: "Mostrar formato YAML de execution_config HTTP"
|
|
1620
|
-
http_config_hint: "Requerido para herramientas HTTP. Mínimo: version: 1, request.method, request.url (HTTPS)."
|
|
1620
|
+
http_config_hint: "Requerido para herramientas HTTP. Mínimo: version: 1, request.method, request.url (HTTPS por defecto; HTTP solo con opt-in de red privada)."
|
|
1621
1621
|
modal_name_placeholder: "ej. calcular_impuestos"
|
|
1622
1622
|
modal_http_method_label: "Método HTTP"
|
|
1623
|
-
modal_http_url_label: "URL HTTPS"
|
|
1623
|
+
modal_http_url_label: "URL HTTP/HTTPS"
|
|
1624
1624
|
modal_http_url_placeholder: "https://api.ejemplo.com/recurso"
|
|
1625
1625
|
parameters_help_title: "Formato YAML de parámetros"
|
|
1626
1626
|
parameters_help_description: "Define parámetros de entrada de la herramienta como un objeto JSON Schema serializado en YAML."
|
|
1627
1627
|
http_config_help_title: "Formato YAML de execution_config HTTP"
|
|
1628
|
-
http_config_help_description: "Usa version: 1 y define request/auth/response. Mantén URLs HTTPS absolutas."
|
|
1628
|
+
http_config_help_description: "Usa version: 1 y define request/auth/response. Mantén URLs HTTPS absolutas salvo que habilites acceso a red privada explícitamente."
|
|
1629
1629
|
http_config_help_get_example: "Ejemplo GET"
|
|
1630
1630
|
http_config_help_post_example: "Ejemplo POST (Bearer desde secrets_manager)"
|
|
1631
1631
|
output_contract_title: "Output Contract"
|
|
@@ -2594,7 +2594,7 @@ js_messages:
|
|
|
2594
2594
|
tool_http_execution_config_version: "execution_config.version debe ser 1"
|
|
2595
2595
|
tool_http_execution_config_request_required: "execution_config.request es obligatorio"
|
|
2596
2596
|
tool_http_request_method_invalid: "request.method debe ser uno de GET, POST, PUT, PATCH, DELETE"
|
|
2597
|
-
tool_http_request_url_invalid: "request.url debe ser una URL HTTPS absoluta"
|
|
2597
|
+
tool_http_request_url_invalid: "request.url debe ser una URL HTTPS absoluta salvo que el acceso a red privada esté habilitado explícitamente"
|
|
2598
2598
|
tool_http_request_timeout_invalid: "request.timeout_ms debe ser un entero entre 1 y 120000"
|
|
2599
2599
|
tool_http_request_field_object: "request.{field} debe ser un objeto"
|
|
2600
2600
|
tool_http_request_body_object: "request.body debe ser un objeto"
|
|
@@ -78,15 +78,49 @@ class HttpToolService:
|
|
|
78
78
|
json_payload: dict | None,
|
|
79
79
|
timeout):
|
|
80
80
|
if method == "GET":
|
|
81
|
-
return self.call_service.get(
|
|
81
|
+
return self.call_service.get(
|
|
82
|
+
url,
|
|
83
|
+
params=params,
|
|
84
|
+
headers=headers,
|
|
85
|
+
timeout=timeout,
|
|
86
|
+
allow_redirects=False,
|
|
87
|
+
)
|
|
82
88
|
if method == "POST":
|
|
83
|
-
return self.call_service.post(
|
|
89
|
+
return self.call_service.post(
|
|
90
|
+
url,
|
|
91
|
+
json_dict=json_payload,
|
|
92
|
+
params=params,
|
|
93
|
+
headers=headers,
|
|
94
|
+
timeout=timeout,
|
|
95
|
+
allow_redirects=False,
|
|
96
|
+
)
|
|
84
97
|
if method == "PUT":
|
|
85
|
-
return self.call_service.put(
|
|
98
|
+
return self.call_service.put(
|
|
99
|
+
url,
|
|
100
|
+
json_dict=json_payload,
|
|
101
|
+
params=params,
|
|
102
|
+
headers=headers,
|
|
103
|
+
timeout=timeout,
|
|
104
|
+
allow_redirects=False,
|
|
105
|
+
)
|
|
86
106
|
if method == "PATCH":
|
|
87
|
-
return self.call_service.patch(
|
|
107
|
+
return self.call_service.patch(
|
|
108
|
+
url,
|
|
109
|
+
json_dict=json_payload,
|
|
110
|
+
params=params,
|
|
111
|
+
headers=headers,
|
|
112
|
+
timeout=timeout,
|
|
113
|
+
allow_redirects=False,
|
|
114
|
+
)
|
|
88
115
|
if method == "DELETE":
|
|
89
|
-
return self.call_service.delete(
|
|
116
|
+
return self.call_service.delete(
|
|
117
|
+
url,
|
|
118
|
+
json_dict=json_payload,
|
|
119
|
+
params=params,
|
|
120
|
+
headers=headers,
|
|
121
|
+
timeout=timeout,
|
|
122
|
+
allow_redirects=False,
|
|
123
|
+
)
|
|
90
124
|
|
|
91
125
|
raise IAToolkitException(
|
|
92
126
|
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
@@ -182,15 +216,35 @@ class HttpToolService:
|
|
|
182
216
|
|
|
183
217
|
def _validate_target_url(self, company_short_name: str, execution_config: dict, url: str):
|
|
184
218
|
parsed = urlparse(url)
|
|
219
|
+
scheme = parsed.scheme.lower()
|
|
185
220
|
host = (parsed.hostname or "").strip().lower()
|
|
221
|
+
allow_private_network = self._private_network_enabled(execution_config)
|
|
222
|
+
allowed_hosts = self._resolve_allowed_hosts(
|
|
223
|
+
company_short_name,
|
|
224
|
+
execution_config,
|
|
225
|
+
include_company_defaults=not allow_private_network,
|
|
226
|
+
)
|
|
186
227
|
|
|
187
|
-
|
|
228
|
+
allowed_schemes = {"https", "http"} if allow_private_network else {"https"}
|
|
229
|
+
if scheme not in allowed_schemes or not host:
|
|
230
|
+
message = "HTTP tools require an absolute HTTPS URL"
|
|
231
|
+
if allow_private_network:
|
|
232
|
+
message = (
|
|
233
|
+
"HTTP tools require an absolute HTTP or HTTPS URL "
|
|
234
|
+
"when allow_private_network=true"
|
|
235
|
+
)
|
|
188
236
|
raise IAToolkitException(
|
|
189
237
|
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
190
|
-
|
|
238
|
+
message
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
if allowed_hosts and not self._host_in_allowlist(host, allowed_hosts):
|
|
242
|
+
raise IAToolkitException(
|
|
243
|
+
IAToolkitException.ErrorType.REQUEST_ERROR,
|
|
244
|
+
f"HTTP tool target host '{host}' is not in allowed_hosts"
|
|
191
245
|
)
|
|
192
246
|
|
|
193
|
-
if host == "localhost" or host.endswith(".local"):
|
|
247
|
+
if host == "localhost" or (host.endswith(".local") and not allow_private_network):
|
|
194
248
|
raise IAToolkitException(
|
|
195
249
|
IAToolkitException.ErrorType.REQUEST_ERROR,
|
|
196
250
|
f"HTTP tool target host '{host}' is not allowed"
|
|
@@ -198,16 +252,35 @@ class HttpToolService:
|
|
|
198
252
|
|
|
199
253
|
ip_value = self._to_ip_or_none(host)
|
|
200
254
|
if ip_value:
|
|
201
|
-
self.
|
|
255
|
+
classification = self._assert_allowed_ip(ip_value, allow_private_network)
|
|
256
|
+
if scheme == "http" and classification != "private":
|
|
257
|
+
raise IAToolkitException(
|
|
258
|
+
IAToolkitException.ErrorType.REQUEST_ERROR,
|
|
259
|
+
"HTTP scheme is only allowed for private-network HTTP tools"
|
|
260
|
+
)
|
|
202
261
|
else:
|
|
203
|
-
self.
|
|
262
|
+
dns_result = self._assert_dns_target_allowed(host, allow_private_network)
|
|
263
|
+
if scheme == "http":
|
|
264
|
+
if not dns_result["resolved"]:
|
|
265
|
+
raise IAToolkitException(
|
|
266
|
+
IAToolkitException.ErrorType.REQUEST_ERROR,
|
|
267
|
+
"HTTP private-network targets must resolve before request"
|
|
268
|
+
)
|
|
269
|
+
if not dns_result["has_private"] or dns_result["has_public"]:
|
|
270
|
+
raise IAToolkitException(
|
|
271
|
+
IAToolkitException.ErrorType.REQUEST_ERROR,
|
|
272
|
+
"HTTP scheme is only allowed for private-network targets"
|
|
273
|
+
)
|
|
204
274
|
|
|
205
|
-
|
|
206
|
-
|
|
275
|
+
@staticmethod
|
|
276
|
+
def _private_network_enabled(execution_config: dict) -> bool:
|
|
277
|
+
security_cfg = execution_config.get("security") or {}
|
|
278
|
+
if not isinstance(security_cfg, dict):
|
|
207
279
|
raise IAToolkitException(
|
|
208
|
-
IAToolkitException.ErrorType.
|
|
209
|
-
|
|
280
|
+
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
281
|
+
"execution_config.security must be a JSON object"
|
|
210
282
|
)
|
|
283
|
+
return security_cfg.get("allow_private_network") is True
|
|
211
284
|
|
|
212
285
|
@staticmethod
|
|
213
286
|
def _to_ip_or_none(host: str):
|
|
@@ -216,14 +289,15 @@ class HttpToolService:
|
|
|
216
289
|
except ValueError:
|
|
217
290
|
return None
|
|
218
291
|
|
|
219
|
-
def
|
|
292
|
+
def _assert_dns_target_allowed(self, hostname: str, allow_private_network: bool) -> dict:
|
|
220
293
|
# Best effort DNS check to reduce SSRF risk when DNS resolves to private ranges.
|
|
221
294
|
try:
|
|
222
295
|
entries = socket.getaddrinfo(hostname, None)
|
|
223
296
|
except Exception:
|
|
224
297
|
# If DNS cannot be resolved here, let the outbound request fail naturally.
|
|
225
|
-
return
|
|
298
|
+
return {"resolved": False, "has_private": False, "has_public": False}
|
|
226
299
|
|
|
300
|
+
result = {"resolved": False, "has_private": False, "has_public": False}
|
|
227
301
|
for entry in entries:
|
|
228
302
|
sockaddr = entry[4]
|
|
229
303
|
if not sockaddr:
|
|
@@ -231,12 +305,18 @@ class HttpToolService:
|
|
|
231
305
|
ip_text = sockaddr[0]
|
|
232
306
|
ip_value = self._to_ip_or_none(ip_text)
|
|
233
307
|
if ip_value:
|
|
234
|
-
|
|
308
|
+
result["resolved"] = True
|
|
309
|
+
classification = self._assert_allowed_ip(ip_value, allow_private_network)
|
|
310
|
+
if classification == "private":
|
|
311
|
+
result["has_private"] = True
|
|
312
|
+
else:
|
|
313
|
+
result["has_public"] = True
|
|
314
|
+
|
|
315
|
+
return result
|
|
235
316
|
|
|
236
317
|
@staticmethod
|
|
237
|
-
def
|
|
238
|
-
if (ip_value.
|
|
239
|
-
ip_value.is_loopback or
|
|
318
|
+
def _assert_allowed_ip(ip_value, allow_private_network: bool) -> str:
|
|
319
|
+
if (ip_value.is_loopback or
|
|
240
320
|
ip_value.is_link_local or
|
|
241
321
|
ip_value.is_reserved or
|
|
242
322
|
ip_value.is_multicast or
|
|
@@ -245,12 +325,23 @@ class HttpToolService:
|
|
|
245
325
|
IAToolkitException.ErrorType.REQUEST_ERROR,
|
|
246
326
|
f"HTTP tool target IP '{ip_value}' is not allowed"
|
|
247
327
|
)
|
|
328
|
+
if ip_value.is_private:
|
|
329
|
+
if allow_private_network:
|
|
330
|
+
return "private"
|
|
331
|
+
raise IAToolkitException(
|
|
332
|
+
IAToolkitException.ErrorType.REQUEST_ERROR,
|
|
333
|
+
f"HTTP tool target IP '{ip_value}' is not allowed"
|
|
334
|
+
)
|
|
335
|
+
return "public"
|
|
248
336
|
|
|
249
|
-
def _resolve_allowed_hosts(self,
|
|
337
|
+
def _resolve_allowed_hosts(self,
|
|
338
|
+
company_short_name: str,
|
|
339
|
+
execution_config: dict,
|
|
340
|
+
include_company_defaults: bool = True) -> list[str]:
|
|
250
341
|
security_cfg = execution_config.get("security") or {}
|
|
251
342
|
allowed_hosts = security_cfg.get("allowed_hosts")
|
|
252
343
|
|
|
253
|
-
if allowed_hosts is None:
|
|
344
|
+
if allowed_hosts is None and include_company_defaults:
|
|
254
345
|
company_params = self.config_service.get_configuration(company_short_name, "parameters") or {}
|
|
255
346
|
http_tools_cfg = company_params.get("http_tools") or {}
|
|
256
347
|
allowed_hosts = http_tools_cfg.get("allowed_hosts")
|
|
@@ -431,11 +431,50 @@ class ToolService:
|
|
|
431
431
|
"execution_config.request.url is required and must be a non-empty string"
|
|
432
432
|
)
|
|
433
433
|
|
|
434
|
+
security_cfg = execution_config.get("security")
|
|
435
|
+
allow_private_network = False
|
|
436
|
+
if security_cfg is not None:
|
|
437
|
+
if not isinstance(security_cfg, dict):
|
|
438
|
+
raise IAToolkitException(
|
|
439
|
+
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
440
|
+
"execution_config.security must be a JSON object"
|
|
441
|
+
)
|
|
442
|
+
|
|
443
|
+
allowed_hosts = security_cfg.get("allowed_hosts")
|
|
444
|
+
if allowed_hosts is not None:
|
|
445
|
+
if not isinstance(allowed_hosts, list):
|
|
446
|
+
raise IAToolkitException(
|
|
447
|
+
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
448
|
+
"execution_config.security.allowed_hosts must be a list"
|
|
449
|
+
)
|
|
450
|
+
for host in allowed_hosts:
|
|
451
|
+
if not isinstance(host, str) or not host.strip():
|
|
452
|
+
raise IAToolkitException(
|
|
453
|
+
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
454
|
+
"execution_config.security.allowed_hosts must contain non-empty strings"
|
|
455
|
+
)
|
|
456
|
+
|
|
457
|
+
allow_private_network_value = security_cfg.get("allow_private_network", False)
|
|
458
|
+
if not isinstance(allow_private_network_value, bool):
|
|
459
|
+
raise IAToolkitException(
|
|
460
|
+
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
461
|
+
"execution_config.security.allow_private_network must be a boolean"
|
|
462
|
+
)
|
|
463
|
+
allow_private_network = allow_private_network_value
|
|
464
|
+
|
|
434
465
|
parsed = urlparse(url)
|
|
435
|
-
|
|
466
|
+
scheme = parsed.scheme.lower()
|
|
467
|
+
allowed_schemes = {"https", "http"} if allow_private_network else {"https"}
|
|
468
|
+
if scheme not in allowed_schemes or not parsed.netloc:
|
|
469
|
+
message = "execution_config.request.url must be an absolute HTTPS URL"
|
|
470
|
+
if allow_private_network:
|
|
471
|
+
message = (
|
|
472
|
+
"execution_config.request.url must be an absolute HTTP or HTTPS URL "
|
|
473
|
+
"when allow_private_network=true"
|
|
474
|
+
)
|
|
436
475
|
raise IAToolkitException(
|
|
437
476
|
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
438
|
-
|
|
477
|
+
message
|
|
439
478
|
)
|
|
440
479
|
|
|
441
480
|
timeout_ms = request_cfg.get("timeout_ms")
|
|
@@ -545,35 +584,6 @@ class ToolService:
|
|
|
545
584
|
"execution_config.response.max_response_bytes must be a positive integer"
|
|
546
585
|
)
|
|
547
586
|
|
|
548
|
-
security_cfg = execution_config.get("security")
|
|
549
|
-
if security_cfg is not None:
|
|
550
|
-
if not isinstance(security_cfg, dict):
|
|
551
|
-
raise IAToolkitException(
|
|
552
|
-
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
553
|
-
"execution_config.security must be a JSON object"
|
|
554
|
-
)
|
|
555
|
-
|
|
556
|
-
allowed_hosts = security_cfg.get("allowed_hosts")
|
|
557
|
-
if allowed_hosts is not None:
|
|
558
|
-
if not isinstance(allowed_hosts, list):
|
|
559
|
-
raise IAToolkitException(
|
|
560
|
-
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
561
|
-
"execution_config.security.allowed_hosts must be a list"
|
|
562
|
-
)
|
|
563
|
-
for host in allowed_hosts:
|
|
564
|
-
if not isinstance(host, str) or not host.strip():
|
|
565
|
-
raise IAToolkitException(
|
|
566
|
-
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
567
|
-
"execution_config.security.allowed_hosts must contain non-empty strings"
|
|
568
|
-
)
|
|
569
|
-
|
|
570
|
-
allow_private_network = security_cfg.get("allow_private_network")
|
|
571
|
-
if allow_private_network is True:
|
|
572
|
-
raise IAToolkitException(
|
|
573
|
-
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
574
|
-
"execution_config.security.allow_private_network=true is not supported"
|
|
575
|
-
)
|
|
576
|
-
|
|
577
587
|
@staticmethod
|
|
578
588
|
def _build_tool_snapshot(tool_obj) -> dict:
|
|
579
589
|
if tool_obj is None:
|
|
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.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py
RENAMED
|
File without changes
|
{iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/interfaces/memory_lint_trigger.py
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/common/interfaces/signup_policy_resolver.py
RENAMED
|
File without changes
|
{iatoolkit-2.21.2 → iatoolkit-2.21.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
|
{iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/core_identity.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/email_output.prompt
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/format_styles.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/html_structures.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/links_documents.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/memory_usage.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/output_basics.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/sql_casting.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.21.2 → iatoolkit-2.21.3}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt
RENAMED
|
File without changes
|