iatoolkit 2.20.0__tar.gz → 2.20.1__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.20.0/src/iatoolkit.egg-info → iatoolkit-2.20.1}/PKG-INFO +1 -1
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/__init__.py +1 -1
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_tools_pack.yaml +12 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/locales/en.yaml +24 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/locales/es.yaml +24 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/repositories/llm_query_repo.py +1 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/repositories/models.py +1 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/inference_service.py +1 -1
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/system_tools.py +4 -0
- iatoolkit-2.20.1/src/iatoolkit/services/tool_output_contract.py +108 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/tool_service.py +16 -3
- {iatoolkit-2.20.0 → iatoolkit-2.20.1/src/iatoolkit.egg-info}/PKG-INFO +1 -1
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit.egg-info/SOURCES.txt +1 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/LICENSE +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/LICENSE_COMMUNITY.md +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/pyproject.toml +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/readme.md +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/requirements.txt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/setup.cfg +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/base_company.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/cli_commands.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/__init__.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/exceptions.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/interfaces/__init__.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/model_registry.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/routes.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/secret_resolver.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/session_manager.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/util.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/company_registry.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/__init__.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/core.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/__init__.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/call_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/connectors/__init__.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/google_auth_client.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/google_chat_app.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/inference_handler.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/llm_proxy.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/llm_response.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/redis_session_manager.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/repositories/__init__.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/repositories/api_key_repo.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/repositories/database_manager.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/repositories/document_repo.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/repositories/memory_repo.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/repositories/profile_repo.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/repositories/vs_repo.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/runtime_logging.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/__init__.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/api_key_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/attachment_policy_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/auth_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/benchmark_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/branding_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/company_context_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/configuration_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/context_builder_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/dispatcher_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/embedding_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/excel_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/file_processor_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/history_manager_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/http_tool_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/i18n_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/jwt_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/knowledge_base_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/language_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/license_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/llm_client_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/mail_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/mcp_token_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/memory_compiler_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/memory_lint_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/memory_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/memory_wiki_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/parsers/__init__.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/parsers/contracts.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/parsers/validator.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/pdf_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/profile_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/prompt_resource_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/prompt_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/query_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/sql_dataset_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/sql_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/sql_source_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/storage_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/structured_output_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/telemetry_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/user_feedback_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/user_session_context_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/visual_kb_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/visual_tool_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/warmup_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/web_search/__init__.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/services/web_search_service.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/images/fernando.jpeg +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/js/chat_filepond.js +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/js/chat_help_content.js +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/js/chat_history_button.js +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/js/chat_main.js +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/styles/chat_modal.css +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/styles/chat_public.css +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/styles/documents.css +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/styles/landing_page.css +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/styles/llm_output.css +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/static/styles/onboarding.css +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/_company_header.html +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/_login_widget.html +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/account.html +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/base.html +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/change_password.html +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/chat.html +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/chat_modals.html +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/error.html +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/forgot_password.html +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/home_hosted_default.html +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/onboarding_shell.html +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/pdf/base.html +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/pdf/letter.html +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/pdf/report.html +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/pdf/simple.html +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/templates/signup.html +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/__init__.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/account_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/api_key_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/base_login_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/categories_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/change_password_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/chat_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/configuration_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/connectors_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/embedding_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/forgot_password_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/help_content_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/history_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/home_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/init_context_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/llmquery_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/load_document_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/login_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/logout_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/memory_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/profile_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/prompt_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/rag_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/root_redirect_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/signup_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/static_page_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/tool_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/users_api_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/views/verify_user_view.py +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit.egg-info/requires.txt +0 -0
- {iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit.egg-info/top_level.txt +0 -0
|
@@ -5,6 +5,12 @@ pack:
|
|
|
5
5
|
tools:
|
|
6
6
|
- function_name: iat_generate_excel
|
|
7
7
|
description: Generador de Excel.Genera un archivo Excel (.xlsx) a partir de una lista de diccionarios. Cada diccionario representa una fila del archivo. el archivo se guarda en storage.retorna diccionario con filename y attachment_token (para recuperar el archivo)content_type y download_link
|
|
8
|
+
output_contract:
|
|
9
|
+
kind: file
|
|
10
|
+
mime_type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
|
11
|
+
transport: signed_url
|
|
12
|
+
url_field: download_link
|
|
13
|
+
filename_field: filename
|
|
8
14
|
routing_profile:
|
|
9
15
|
tags:
|
|
10
16
|
- excel
|
|
@@ -54,6 +60,12 @@ tools:
|
|
|
54
60
|
- data
|
|
55
61
|
- function_name: iat_generate_pdf
|
|
56
62
|
description: Generador de PDF. Convierte contenido HTML o Markdown en un archivo PDF descargable. El archivo se guarda en storage y retorna filename, attachment_token, content_type y download_link.
|
|
63
|
+
output_contract:
|
|
64
|
+
kind: file
|
|
65
|
+
mime_type: application/pdf
|
|
66
|
+
transport: signed_url
|
|
67
|
+
url_field: download_link
|
|
68
|
+
filename_field: filename
|
|
57
69
|
routing_profile:
|
|
58
70
|
tags:
|
|
59
71
|
- pdf
|
|
@@ -1581,12 +1581,29 @@ ui:
|
|
|
1581
1581
|
visual_editor: "Visual Editor"
|
|
1582
1582
|
yaml_badge: "YAML"
|
|
1583
1583
|
yaml_json_badge: "YAML / JSON"
|
|
1584
|
+
tab_general: "General"
|
|
1585
|
+
tab_input: "Input"
|
|
1586
|
+
tab_execution: "Execution"
|
|
1587
|
+
tab_output: "Output"
|
|
1588
|
+
tab_routing: "Routing"
|
|
1589
|
+
tab_raw: "Raw"
|
|
1590
|
+
general_hint: "Define the tool identity first, then move through input, execution, output, and routing as needed."
|
|
1591
|
+
execution_hint: "Define how this tool executes and what runtime contract it depends on."
|
|
1592
|
+
execution_hint_http: "HTTP tools define request/auth/response behavior in execution_config."
|
|
1593
|
+
execution_hint_inference: "Inference tools usually rely on external runtime model settings; use Output to describe the returned artifact."
|
|
1594
|
+
execution_hint_native: "Native tools execute through toolkit runtime code, so there is no editable execution_config here."
|
|
1595
|
+
inference_execution_hint: "This tool type does not expose an editable execution_config in the GUI. Use the Output tab to document what the runtime returns."
|
|
1596
|
+
native_execution_hint: "This tool type executes through internal runtime code. There is no editable execution_config in this editor."
|
|
1597
|
+
raw_hint: "Edit the full tool definition as YAML. This advanced mode includes parameters, execution_config, output_contract, and routing_profile."
|
|
1598
|
+
raw_footer_hint: "Saving from Raw uses this document as the source of truth for the tool definition."
|
|
1584
1599
|
|
|
1585
1600
|
# Modal
|
|
1586
1601
|
modal_title: "Create New Tool"
|
|
1587
1602
|
modal_name_label: "Tool Name (LLM Function)"
|
|
1588
1603
|
modal_name_help: "Use snake_case. Must be unique."
|
|
1589
1604
|
modal_type_label: "Type"
|
|
1605
|
+
modal_output_preset_label: "Output preset"
|
|
1606
|
+
modal_output_preset_none: "No preset"
|
|
1590
1607
|
modal_desc_label: "Short Description"
|
|
1591
1608
|
modal_desc_placeholder: "Briefly explain what this tool does..."
|
|
1592
1609
|
modal_cancel: "Cancel"
|
|
@@ -1607,6 +1624,10 @@ ui:
|
|
|
1607
1624
|
http_config_help_description: "Use version: 1 and define request/auth/response. Keep URLs as absolute HTTPS."
|
|
1608
1625
|
http_config_help_get_example: "GET example"
|
|
1609
1626
|
http_config_help_post_example: "POST example (Bearer from secrets_manager)"
|
|
1627
|
+
output_contract_title: "Output Contract"
|
|
1628
|
+
output_contract_hint: "Optional. Use YAML/JSON to describe the returned artifact, for example kind/image/file/audio/video plus transport and field names such as image_url or download_link."
|
|
1629
|
+
modal_output_contract_label: "Initial output_contract"
|
|
1630
|
+
modal_output_contract_placeholder: "kind: image\nmime_type: image/png\ntransport: signed_url\nurl_field: image_url"
|
|
1610
1631
|
routing_profile_title: "Routing Profile"
|
|
1611
1632
|
routing_profile_hint: "Used by enterprise tool routing to rank and select candidate tools."
|
|
1612
1633
|
|
|
@@ -2568,6 +2589,7 @@ js_messages:
|
|
|
2568
2589
|
tool_pack_read_only: "PACK tools are read-only. Use Clone to USER."
|
|
2569
2590
|
tool_invalid_yaml_format: "Invalid YAML format: {message}"
|
|
2570
2591
|
tool_http_execution_config_label: "HTTP execution_config"
|
|
2592
|
+
tool_output_contract_label: "output_contract"
|
|
2571
2593
|
tool_invalid_http_execution_config: "Invalid HTTP execution_config"
|
|
2572
2594
|
tool_error_saving: "Error saving tool"
|
|
2573
2595
|
tool_saved_ok: "Tool saved successfully"
|
|
@@ -2577,6 +2599,7 @@ js_messages:
|
|
|
2577
2599
|
tool_error_cloning_pack: "Error cloning PACK tool"
|
|
2578
2600
|
tool_pack_cloned_ok: "PACK tool cloned as USER tool"
|
|
2579
2601
|
tool_name_required: "Name is required"
|
|
2602
|
+
tool_description_required: "Description is required"
|
|
2580
2603
|
tool_error_creating: "Error creating tool"
|
|
2581
2604
|
tool_created_ok: "Tool created"
|
|
2582
2605
|
tool_status_active: "Active"
|
|
@@ -2590,6 +2613,7 @@ js_messages:
|
|
|
2590
2613
|
tool_routing_profile_cost_object: "routing_profile.cost must be an object"
|
|
2591
2614
|
tool_routing_profile_penalty_non_negative: "routing_profile.cost.penalty must be a non-negative number"
|
|
2592
2615
|
tool_routing_profile_label: "routing_profile"
|
|
2616
|
+
tool_output_contract_object: "output_contract must be an object"
|
|
2593
2617
|
tool_invalid_routing_profile: "Invalid routing_profile"
|
|
2594
2618
|
tool_error_loading_routing_profile: "Error loading routing profile"
|
|
2595
2619
|
tool_error_saving_routing_profile: "Error saving routing profile"
|
|
@@ -1585,12 +1585,29 @@ ui:
|
|
|
1585
1585
|
visual_editor: "Editor Visual"
|
|
1586
1586
|
yaml_badge: "YAML"
|
|
1587
1587
|
yaml_json_badge: "YAML / JSON"
|
|
1588
|
+
tab_general: "General"
|
|
1589
|
+
tab_input: "Input"
|
|
1590
|
+
tab_execution: "Execution"
|
|
1591
|
+
tab_output: "Output"
|
|
1592
|
+
tab_routing: "Routing"
|
|
1593
|
+
tab_raw: "Raw"
|
|
1594
|
+
general_hint: "Define primero la identidad de la tool y luego avanza por input, execution, output y routing según lo necesites."
|
|
1595
|
+
execution_hint: "Define cómo se ejecuta esta tool y de qué contrato de runtime depende."
|
|
1596
|
+
execution_hint_http: "Las tools HTTP definen request/auth/response en execution_config."
|
|
1597
|
+
execution_hint_inference: "Las tools de inference suelen depender de settings externos del runtime; usa Output para describir el artefacto devuelto."
|
|
1598
|
+
execution_hint_native: "Las tools nativas se ejecutan en código interno del runtime, por eso aquí no existe un execution_config editable."
|
|
1599
|
+
inference_execution_hint: "Este tipo de tool no expone un execution_config editable en la GUI. Usa el tab Output para documentar qué devuelve el runtime."
|
|
1600
|
+
native_execution_hint: "Este tipo de tool se ejecuta mediante código interno del runtime. No hay un execution_config editable en este editor."
|
|
1601
|
+
raw_hint: "Edita la definición completa de la tool como YAML. Este modo avanzado incluye parameters, execution_config, output_contract y routing_profile."
|
|
1602
|
+
raw_footer_hint: "Guardar desde Raw usa este documento como source of truth de la definición de la tool."
|
|
1588
1603
|
|
|
1589
1604
|
# Modal
|
|
1590
1605
|
modal_title: "Crear Nueva Herramienta"
|
|
1591
1606
|
modal_name_label: "Nombre (Función LLM)"
|
|
1592
1607
|
modal_name_help: "Usar snake_case. Debe ser único."
|
|
1593
1608
|
modal_type_label: "Tipo"
|
|
1609
|
+
modal_output_preset_label: "Preset de output"
|
|
1610
|
+
modal_output_preset_none: "Sin preset"
|
|
1594
1611
|
modal_desc_label: "Descripción Corta"
|
|
1595
1612
|
modal_desc_placeholder: "Explica brevemente qué hace esta herramienta..."
|
|
1596
1613
|
modal_cancel: "Cancelar"
|
|
@@ -1611,6 +1628,10 @@ ui:
|
|
|
1611
1628
|
http_config_help_description: "Usa version: 1 y define request/auth/response. Mantén URLs HTTPS absolutas."
|
|
1612
1629
|
http_config_help_get_example: "Ejemplo GET"
|
|
1613
1630
|
http_config_help_post_example: "Ejemplo POST (Bearer desde secrets_manager)"
|
|
1631
|
+
output_contract_title: "Output Contract"
|
|
1632
|
+
output_contract_hint: "Opcional. Usa YAML/JSON para describir el artefacto devuelto, por ejemplo kind/image/file/audio/video más transport y nombres de campos como image_url o download_link."
|
|
1633
|
+
modal_output_contract_label: "output_contract inicial"
|
|
1634
|
+
modal_output_contract_placeholder: "kind: image\nmime_type: image/png\ntransport: signed_url\nurl_field: image_url"
|
|
1614
1635
|
routing_profile_title: "Routing Profile"
|
|
1615
1636
|
routing_profile_hint: "Usado por el router enterprise para rankear y seleccionar herramientas candidatas."
|
|
1616
1637
|
|
|
@@ -2571,6 +2592,7 @@ js_messages:
|
|
|
2571
2592
|
tool_pack_read_only: "Las herramientas PACK son de solo lectura. Usa Clonar a USER."
|
|
2572
2593
|
tool_invalid_yaml_format: "Formato YAML inválido: {message}"
|
|
2573
2594
|
tool_http_execution_config_label: "execution_config HTTP"
|
|
2595
|
+
tool_output_contract_label: "output_contract"
|
|
2574
2596
|
tool_invalid_http_execution_config: "execution_config HTTP inválido"
|
|
2575
2597
|
tool_error_saving: "Error guardando herramienta"
|
|
2576
2598
|
tool_saved_ok: "Herramienta guardada correctamente"
|
|
@@ -2580,6 +2602,7 @@ js_messages:
|
|
|
2580
2602
|
tool_error_cloning_pack: "Error al clonar herramienta PACK"
|
|
2581
2603
|
tool_pack_cloned_ok: "Herramienta PACK clonada como herramienta USER"
|
|
2582
2604
|
tool_name_required: "El nombre es obligatorio"
|
|
2605
|
+
tool_description_required: "La descripción es obligatoria"
|
|
2583
2606
|
tool_error_creating: "Error creando herramienta"
|
|
2584
2607
|
tool_created_ok: "Herramienta creada"
|
|
2585
2608
|
tool_status_active: "Activo"
|
|
@@ -2593,6 +2616,7 @@ js_messages:
|
|
|
2593
2616
|
tool_routing_profile_cost_object: "routing_profile.cost debe ser un objeto"
|
|
2594
2617
|
tool_routing_profile_penalty_non_negative: "routing_profile.cost.penalty debe ser un número no negativo"
|
|
2595
2618
|
tool_routing_profile_label: "routing_profile"
|
|
2619
|
+
tool_output_contract_object: "output_contract debe ser un objeto"
|
|
2596
2620
|
tool_invalid_routing_profile: "routing_profile inválido"
|
|
2597
2621
|
tool_error_loading_routing_profile: "Error cargando routing profile"
|
|
2598
2622
|
tool_error_saving_routing_profile: "Error guardando routing profile"
|
|
@@ -120,6 +120,7 @@ class LLMQueryRepo:
|
|
|
120
120
|
tool.description = new_tool.description
|
|
121
121
|
tool.parameters = new_tool.parameters
|
|
122
122
|
tool.execution_config = new_tool.execution_config
|
|
123
|
+
tool.output_contract = new_tool.output_contract
|
|
123
124
|
tool.tool_type = new_tool.tool_type
|
|
124
125
|
tool.source = new_tool.source
|
|
125
126
|
if new_tool.is_active is not None:
|
|
@@ -254,6 +254,7 @@ class Tool(Base):
|
|
|
254
254
|
description = Column(Text, nullable=False)
|
|
255
255
|
parameters = Column(JSON, nullable=False)
|
|
256
256
|
execution_config = Column(JSON_NATIVE, nullable=True)
|
|
257
|
+
output_contract = Column(JSON_NATIVE, nullable=True)
|
|
257
258
|
is_active = Column(Boolean, default=True)
|
|
258
259
|
created_at = Column(DateTime, default=datetime.now)
|
|
259
260
|
|
|
@@ -101,7 +101,7 @@ class InferenceService:
|
|
|
101
101
|
payload["parameters"] = parameters
|
|
102
102
|
|
|
103
103
|
# 4. Execute Call
|
|
104
|
-
logging.
|
|
104
|
+
logging.info("Calling inference tool %s with model %s.", tool_name, model_id)
|
|
105
105
|
response_data = self._call_endpoint(
|
|
106
106
|
endpoint_url,
|
|
107
107
|
api_key,
|
|
@@ -6,6 +6,8 @@ from typing import Any
|
|
|
6
6
|
|
|
7
7
|
import yaml
|
|
8
8
|
|
|
9
|
+
from iatoolkit.services.tool_output_contract import clone_output_contract, normalize_output_contract
|
|
10
|
+
|
|
9
11
|
|
|
10
12
|
SYSTEM_TOOLS_CONFIG_PACKAGE = "iatoolkit.config"
|
|
11
13
|
SYSTEM_TOOLS_CONFIG_FILENAME = "system_tools_pack.yaml"
|
|
@@ -59,6 +61,8 @@ def _validate_system_tool_entry(entry: dict, index: int) -> dict:
|
|
|
59
61
|
"description": description,
|
|
60
62
|
"parameters": copy.deepcopy(parameters),
|
|
61
63
|
}
|
|
64
|
+
if entry.get("output_contract") is not None:
|
|
65
|
+
normalized["output_contract"] = clone_output_contract(normalize_output_contract(entry.get("output_contract")))
|
|
62
66
|
if normalized_routing is not None:
|
|
63
67
|
normalized["routing"] = normalized_routing
|
|
64
68
|
if normalized_routing_profile is not None:
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import copy
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
from iatoolkit.common.exceptions import IAToolkitException
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
ALLOWED_OUTPUT_KINDS = {"json", "html", "image", "file", "audio", "video"}
|
|
10
|
+
ALLOWED_OUTPUT_TRANSPORTS = {"inline_base64", "signed_url", "attachment"}
|
|
11
|
+
ALLOWED_OUTPUT_CONTRACT_KEYS = {
|
|
12
|
+
"kind",
|
|
13
|
+
"mime_type",
|
|
14
|
+
"transport",
|
|
15
|
+
"url_field",
|
|
16
|
+
"base64_field",
|
|
17
|
+
"filename_field",
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def normalize_output_contract(output_contract: Any) -> dict | None:
|
|
22
|
+
if output_contract in (None, "", {}):
|
|
23
|
+
return None
|
|
24
|
+
if not isinstance(output_contract, dict):
|
|
25
|
+
raise IAToolkitException(
|
|
26
|
+
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
27
|
+
"output_contract must be a JSON object",
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
unknown_keys = sorted(key for key in output_contract.keys() if key not in ALLOWED_OUTPUT_CONTRACT_KEYS)
|
|
31
|
+
if unknown_keys:
|
|
32
|
+
raise IAToolkitException(
|
|
33
|
+
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
34
|
+
f"output_contract has unsupported keys: {unknown_keys}",
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
kind = str(output_contract.get("kind") or "").strip().lower()
|
|
38
|
+
if kind not in ALLOWED_OUTPUT_KINDS:
|
|
39
|
+
raise IAToolkitException(
|
|
40
|
+
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
41
|
+
f"output_contract.kind must be one of {sorted(ALLOWED_OUTPUT_KINDS)}",
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
normalized = {"kind": kind}
|
|
45
|
+
mime_type = _normalize_optional_string(output_contract.get("mime_type"))
|
|
46
|
+
transport = _normalize_optional_string(output_contract.get("transport"))
|
|
47
|
+
url_field = _normalize_optional_string(output_contract.get("url_field"))
|
|
48
|
+
base64_field = _normalize_optional_string(output_contract.get("base64_field"))
|
|
49
|
+
filename_field = _normalize_optional_string(output_contract.get("filename_field"))
|
|
50
|
+
|
|
51
|
+
if mime_type:
|
|
52
|
+
normalized["mime_type"] = mime_type
|
|
53
|
+
if transport:
|
|
54
|
+
transport = transport.lower()
|
|
55
|
+
if transport not in ALLOWED_OUTPUT_TRANSPORTS:
|
|
56
|
+
raise IAToolkitException(
|
|
57
|
+
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
58
|
+
f"output_contract.transport must be one of {sorted(ALLOWED_OUTPUT_TRANSPORTS)}",
|
|
59
|
+
)
|
|
60
|
+
normalized["transport"] = transport
|
|
61
|
+
if url_field:
|
|
62
|
+
normalized["url_field"] = url_field
|
|
63
|
+
if base64_field:
|
|
64
|
+
normalized["base64_field"] = base64_field
|
|
65
|
+
if filename_field:
|
|
66
|
+
normalized["filename_field"] = filename_field
|
|
67
|
+
|
|
68
|
+
if kind in {"json", "html"}:
|
|
69
|
+
if transport or url_field or base64_field or filename_field:
|
|
70
|
+
raise IAToolkitException(
|
|
71
|
+
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
72
|
+
"output_contract transport fields are not allowed for json/html outputs",
|
|
73
|
+
)
|
|
74
|
+
return normalized
|
|
75
|
+
|
|
76
|
+
if not transport:
|
|
77
|
+
raise IAToolkitException(
|
|
78
|
+
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
79
|
+
f"output_contract.transport is required for output kind '{kind}'",
|
|
80
|
+
)
|
|
81
|
+
if transport == "signed_url" and not url_field:
|
|
82
|
+
raise IAToolkitException(
|
|
83
|
+
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
84
|
+
"output_contract.url_field is required when transport is 'signed_url'",
|
|
85
|
+
)
|
|
86
|
+
if transport == "inline_base64" and not base64_field:
|
|
87
|
+
raise IAToolkitException(
|
|
88
|
+
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
89
|
+
"output_contract.base64_field is required when transport is 'inline_base64'",
|
|
90
|
+
)
|
|
91
|
+
if transport == "attachment" and not filename_field:
|
|
92
|
+
raise IAToolkitException(
|
|
93
|
+
IAToolkitException.ErrorType.INVALID_PARAMETER,
|
|
94
|
+
"output_contract.filename_field is required when transport is 'attachment'",
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
return normalized
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def clone_output_contract(output_contract: Any) -> dict | None:
|
|
101
|
+
if isinstance(output_contract, dict):
|
|
102
|
+
return copy.deepcopy(output_contract)
|
|
103
|
+
return None
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def _normalize_optional_string(value: Any) -> str | None:
|
|
107
|
+
text = str(value or "").strip()
|
|
108
|
+
return text or None
|
|
@@ -26,6 +26,7 @@ from iatoolkit.services.system_tools import (
|
|
|
26
26
|
get_system_tools_catalog_source,
|
|
27
27
|
get_system_tool_force_include_capabilities,
|
|
28
28
|
)
|
|
29
|
+
from iatoolkit.services.tool_output_contract import clone_output_contract, normalize_output_contract
|
|
29
30
|
from iatoolkit import current_iatoolkit
|
|
30
31
|
|
|
31
32
|
|
|
@@ -382,7 +383,8 @@ class ToolService:
|
|
|
382
383
|
return text
|
|
383
384
|
return f"[{text}]({url})"
|
|
384
385
|
|
|
385
|
-
def _validate_tool_contract(self, tool_type: str, execution_config):
|
|
386
|
+
def _validate_tool_contract(self, tool_type: str, execution_config, output_contract=None):
|
|
387
|
+
normalize_output_contract(output_contract)
|
|
386
388
|
if tool_type != Tool.TYPE_HTTP:
|
|
387
389
|
return
|
|
388
390
|
|
|
@@ -587,6 +589,7 @@ class ToolService:
|
|
|
587
589
|
"description",
|
|
588
590
|
"parameters",
|
|
589
591
|
"execution_config",
|
|
592
|
+
"output_contract",
|
|
590
593
|
"tool_type",
|
|
591
594
|
"source",
|
|
592
595
|
"is_active",
|
|
@@ -640,6 +643,7 @@ class ToolService:
|
|
|
640
643
|
name=function['function_name'],
|
|
641
644
|
description=function['description'],
|
|
642
645
|
parameters=function['parameters'],
|
|
646
|
+
output_contract=clone_output_contract(function.get("output_contract")),
|
|
643
647
|
tool_type=Tool.TYPE_SYSTEM,
|
|
644
648
|
source=Tool.SOURCE_SYSTEM,
|
|
645
649
|
is_active=True,
|
|
@@ -680,6 +684,7 @@ class ToolService:
|
|
|
680
684
|
and bool(tool.is_active)
|
|
681
685
|
and tool.description == definition.get("description")
|
|
682
686
|
and (tool.parameters or {}) == (definition.get("parameters") or {})
|
|
687
|
+
and (tool.output_contract or {}) == (definition.get("output_contract") or {})
|
|
683
688
|
)
|
|
684
689
|
|
|
685
690
|
def _system_tools_catalog_has_drift(
|
|
@@ -738,6 +743,7 @@ class ToolService:
|
|
|
738
743
|
name=function_name,
|
|
739
744
|
description=function.get("description"),
|
|
740
745
|
parameters=function.get("parameters") or {},
|
|
746
|
+
output_contract=clone_output_contract(function.get("output_contract")),
|
|
741
747
|
tool_type=Tool.TYPE_SYSTEM,
|
|
742
748
|
source=Tool.SOURCE_SYSTEM,
|
|
743
749
|
is_active=True,
|
|
@@ -831,6 +837,7 @@ class ToolService:
|
|
|
831
837
|
name=name,
|
|
832
838
|
description=tool_data['description'],
|
|
833
839
|
parameters=tool_data['params'],
|
|
840
|
+
output_contract=clone_output_contract(tool_data.get('output_contract')),
|
|
834
841
|
|
|
835
842
|
tool_type=Tool.TYPE_NATIVE,
|
|
836
843
|
source=Tool.SOURCE_YAML,
|
|
@@ -887,7 +894,8 @@ class ToolService:
|
|
|
887
894
|
|
|
888
895
|
tool_type = tool_data.get('tool_type', Tool.TYPE_NATIVE)
|
|
889
896
|
execution_config = tool_data.get('execution_config')
|
|
890
|
-
|
|
897
|
+
output_contract = normalize_output_contract(tool_data.get('output_contract'))
|
|
898
|
+
self._validate_tool_contract(tool_type, execution_config, output_contract)
|
|
891
899
|
|
|
892
900
|
new_tool = Tool(
|
|
893
901
|
company_id=company.id,
|
|
@@ -895,6 +903,7 @@ class ToolService:
|
|
|
895
903
|
description=tool_data['description'],
|
|
896
904
|
parameters=tool_data.get('parameters', {"type": "object", "properties": {}}),
|
|
897
905
|
execution_config=execution_config,
|
|
906
|
+
output_contract=output_contract,
|
|
898
907
|
tool_type=tool_type,
|
|
899
908
|
source=Tool.SOURCE_USER,
|
|
900
909
|
is_active=tool_data.get('is_active', True)
|
|
@@ -939,7 +948,9 @@ class ToolService:
|
|
|
939
948
|
|
|
940
949
|
effective_tool_type = tool_data.get('tool_type', tool.tool_type)
|
|
941
950
|
effective_execution_config = tool_data.get('execution_config', tool.execution_config)
|
|
942
|
-
|
|
951
|
+
existing_output_contract = clone_output_contract(tool.output_contract) if isinstance(tool.output_contract, dict) else None
|
|
952
|
+
effective_output_contract = normalize_output_contract(tool_data.get('output_contract', existing_output_contract))
|
|
953
|
+
self._validate_tool_contract(effective_tool_type, effective_execution_config, effective_output_contract)
|
|
943
954
|
|
|
944
955
|
# Update fields
|
|
945
956
|
if 'name' in tool_data:
|
|
@@ -950,6 +961,8 @@ class ToolService:
|
|
|
950
961
|
tool.parameters = tool_data['parameters']
|
|
951
962
|
if 'execution_config' in tool_data:
|
|
952
963
|
tool.execution_config = tool_data['execution_config']
|
|
964
|
+
if 'output_contract' in tool_data:
|
|
965
|
+
tool.output_contract = effective_output_contract
|
|
953
966
|
if 'tool_type' in tool_data:
|
|
954
967
|
tool.tool_type = tool_data['tool_type']
|
|
955
968
|
if 'is_active' in tool_data:
|
|
@@ -147,6 +147,7 @@ src/iatoolkit/services/structured_output_service.py
|
|
|
147
147
|
src/iatoolkit/services/system_prompt_catalog.py
|
|
148
148
|
src/iatoolkit/services/system_tools.py
|
|
149
149
|
src/iatoolkit/services/telemetry_service.py
|
|
150
|
+
src/iatoolkit/services/tool_output_contract.py
|
|
150
151
|
src/iatoolkit/services/tool_service.py
|
|
151
152
|
src/iatoolkit/services/user_feedback_service.py
|
|
152
153
|
src/iatoolkit/services/user_session_context_service.py
|
|
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.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py
RENAMED
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/interfaces/memory_lint_trigger.py
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/common/interfaces/signup_policy_resolver.py
RENAMED
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/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.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/core_identity.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/email_output.prompt
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/format_styles.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/html_structures.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/links_documents.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/memory_usage.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/output_basics.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/sql_casting.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/connectors/file_connector_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/connectors/google_drive_connector.py
RENAMED
|
File without changes
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/connectors/local_file_connector.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
|
{iatoolkit-2.20.0 → iatoolkit-2.20.1}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|