iatoolkit 2.48.0__tar.gz → 2.49.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {iatoolkit-2.48.0/src/iatoolkit.egg-info → iatoolkit-2.49.0}/PKG-INFO +1 -1
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/__init__.py +1 -1
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/locales/en.yaml +10 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/locales/es.yaml +10 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/models.py +28 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/configuration_service.py +37 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/mcp_token_service.py +50 -2
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/prompt_service.py +44 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/prompt_api_view.py +2 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0/src/iatoolkit.egg-info}/PKG-INFO +1 -1
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/LICENSE +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/LICENSE_COMMUNITY.md +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/pyproject.toml +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/readme.md +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/requirements.txt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/setup.cfg +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/base_company.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/cli_commands.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/__init__.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/bridge_validation.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/exceptions.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/__init__.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/model_registry.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/routes.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/secret_resolver.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/session_manager.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/url_safety.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/util.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/company_registry.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/__init__.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/core.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/__init__.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/call_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/connectors/__init__.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/google_auth_client.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/google_chat_app.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/inference_handler.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_proxy.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_response.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/redis_session_manager.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/__init__.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/api_key_repo.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/bridge_repo.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/database_manager.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/document_repo.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/memory_repo.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/profile_repo.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/vs_repo.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/runtime_logging.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/__init__.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/api_key_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/attachment_policy_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/auth_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/benchmark_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/branding_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/company_context_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/context_builder_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/dispatcher_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/embedding_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/excel_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/file_processor_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/history_manager_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/http_tool_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/i18n_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/inference_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/jwt_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/knowledge_base_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/language_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/license_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/llm_client_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/mail_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/memory_compiler_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/memory_lint_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/memory_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/memory_wiki_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/operator_identity_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/__init__.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/contracts.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/parsers/validator.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/pdf_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/profile_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/prompt_resource_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/query_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/sql_dataset_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/sql_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/sql_source_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/storage_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/structured_output_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/system_tools.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/telemetry_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/tool_output_contract.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/tool_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/user_feedback_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/user_session_context_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/visual_kb_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/visual_tool_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/warmup_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/web_search/__init__.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/services/web_search_service.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/images/fernando.jpeg +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_filepond.js +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_help_content.js +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_history_button.js +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_main.js +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/styles/chat_modal.css +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/styles/chat_public.css +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/styles/documents.css +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/styles/landing_page.css +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/styles/llm_output.css +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/static/styles/onboarding.css +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/_company_header.html +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/_login_widget.html +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/account.html +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/base.html +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/change_password.html +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/chat.html +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/chat_modals.html +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/error.html +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/forgot_password.html +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/home_hosted_default.html +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/onboarding_shell.html +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/pdf/base.html +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/pdf/letter.html +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/pdf/report.html +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/pdf/simple.html +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/templates/signup.html +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/__init__.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/account_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/api_key_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/base_login_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/categories_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/change_password_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/chat_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/configuration_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/connectors_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/embedding_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/forgot_password_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/help_content_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/history_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/home_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/init_context_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/llmquery_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/load_document_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/login_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/logout_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/memory_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/profile_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/rag_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/root_redirect_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/signup_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/static_page_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/tool_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/users_api_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/views/verify_user_view.py +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit.egg-info/requires.txt +0 -0
- {iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit.egg-info/top_level.txt +0 -0
|
@@ -1078,6 +1078,9 @@ ui:
|
|
|
1078
1078
|
cron_daily_at_3: "daily at 03:00"
|
|
1079
1079
|
cron_weekdays_at_9: "weekdays at 09:00"
|
|
1080
1080
|
timezone: "Timezone"
|
|
1081
|
+
parameters: "Parameters"
|
|
1082
|
+
arguments_help: "Sent to the target on every run."
|
|
1083
|
+
arguments_help_pipeline: 'Pipeline filters: {"filters": {...}}'
|
|
1081
1084
|
execution: "Execution"
|
|
1082
1085
|
queue: "Queue"
|
|
1083
1086
|
timeout_seconds: "Timeout (seconds)"
|
|
@@ -1797,6 +1800,13 @@ ui:
|
|
|
1797
1800
|
queue_tier_default: "Default"
|
|
1798
1801
|
queue_tier_low: "Low priority"
|
|
1799
1802
|
queue_tier_help: "Low priority agents run only after the normal agents queue is empty."
|
|
1803
|
+
runtime_provider_label: "Provider"
|
|
1804
|
+
runtime_provider_query_service: "Default (uses LLM query)"
|
|
1805
|
+
runtime_provider_openai_agents: "OpenAI Agents"
|
|
1806
|
+
runtime_config_label: "Runtime config"
|
|
1807
|
+
runtime_config_help: "Choose the runtime and, when needed, pass OpenAI Agents harness attributes. The tenant MCP is attached automatically."
|
|
1808
|
+
runtime_config_json_label: "Config JSON"
|
|
1809
|
+
runtime_config_json_help: "Optional JSON for runtime details such as environment, instructions, web_search, multi_agent or MCP connection attributes like mcp.service_token_id/service_token_name. MCP tool exposure is managed in the MCP admin."
|
|
1800
1810
|
active_label: "Active"
|
|
1801
1811
|
output_type_label: "Output Type"
|
|
1802
1812
|
output_type_free_text: "Free text"
|
|
@@ -1093,6 +1093,9 @@ ui:
|
|
|
1093
1093
|
cron_daily_at_3: "diariamente a las 03:00"
|
|
1094
1094
|
cron_weekdays_at_9: "lunes a viernes a las 09:00"
|
|
1095
1095
|
timezone: "Zona horaria"
|
|
1096
|
+
parameters: "Parámetros"
|
|
1097
|
+
arguments_help: "Se envía al destino en cada ejecución."
|
|
1098
|
+
arguments_help_pipeline: 'Filtros del pipeline: {"filters": {...}}'
|
|
1096
1099
|
execution: "Ejecución"
|
|
1097
1100
|
queue: "Cola"
|
|
1098
1101
|
timeout_seconds: "Timeout (segundos)"
|
|
@@ -1814,6 +1817,13 @@ ui:
|
|
|
1814
1817
|
queue_tier_default: "Por defecto"
|
|
1815
1818
|
queue_tier_low: "Baja prioridad"
|
|
1816
1819
|
queue_tier_help: "Los agentes de baja prioridad solo se ejecutan cuando la cola normal de agentes está vacía."
|
|
1820
|
+
runtime_provider_label: "Provider"
|
|
1821
|
+
runtime_provider_query_service: "Default (usa LLM query)"
|
|
1822
|
+
runtime_provider_openai_agents: "OpenAI Agents"
|
|
1823
|
+
runtime_config_label: "Configuración runtime"
|
|
1824
|
+
runtime_config_help: "Elige el runtime y, cuando haga falta, pasa atributos del arnés de OpenAI Agents. El MCP del tenant se adjunta automáticamente."
|
|
1825
|
+
runtime_config_json_label: "JSON de configuración"
|
|
1826
|
+
runtime_config_json_help: "JSON opcional para detalles runtime como environment, instructions, web_search, multi_agent o atributos de conexión MCP como mcp.service_token_id/service_token_name. La exposición de tools se administra en el MCP admin."
|
|
1817
1827
|
active_label: "Activo"
|
|
1818
1828
|
output_type_label: "Tipo de Salida"
|
|
1819
1829
|
output_type_free_text: "Texto libre"
|
|
@@ -45,6 +45,11 @@ class PromptAgentRole(str, enum.Enum):
|
|
|
45
45
|
OPERATIONS = "operations"
|
|
46
46
|
|
|
47
47
|
|
|
48
|
+
class PromptRuntimeProvider(str, enum.Enum):
|
|
49
|
+
QUERY_SERVICE = "query_service"
|
|
50
|
+
OPENAI_AGENTS = "openai_agents"
|
|
51
|
+
|
|
52
|
+
|
|
48
53
|
class PromptResourceType(str, enum.Enum):
|
|
49
54
|
SQL_SOURCE = "sql_source"
|
|
50
55
|
RAG_COLLECTION = "rag_collection"
|
|
@@ -896,6 +901,29 @@ class Prompt(Base):
|
|
|
896
901
|
def context_policy(self, value: dict | None):
|
|
897
902
|
self._set_runtime_policy_value("context", dict(value or {}))
|
|
898
903
|
|
|
904
|
+
@property
|
|
905
|
+
def runtime_provider(self) -> str:
|
|
906
|
+
provider = str((self.runtime_policy or {}).get("runtime_provider") or "").strip().lower()
|
|
907
|
+
if provider in {item.value for item in PromptRuntimeProvider}:
|
|
908
|
+
return provider
|
|
909
|
+
return PromptRuntimeProvider.QUERY_SERVICE.value
|
|
910
|
+
|
|
911
|
+
@runtime_provider.setter
|
|
912
|
+
def runtime_provider(self, value: str | None):
|
|
913
|
+
provider = str(value or "").strip().lower()
|
|
914
|
+
if provider not in {item.value for item in PromptRuntimeProvider}:
|
|
915
|
+
provider = PromptRuntimeProvider.QUERY_SERVICE.value
|
|
916
|
+
self._set_runtime_policy_value("runtime_provider", provider)
|
|
917
|
+
|
|
918
|
+
@property
|
|
919
|
+
def runtime_config(self) -> dict:
|
|
920
|
+
runtime_config = (self.runtime_policy or {}).get("runtime_config")
|
|
921
|
+
return dict(runtime_config or {}) if isinstance(runtime_config, dict) else {}
|
|
922
|
+
|
|
923
|
+
@runtime_config.setter
|
|
924
|
+
def runtime_config(self, value: dict | None):
|
|
925
|
+
self._set_runtime_policy_value("runtime_config", dict(value or {}))
|
|
926
|
+
|
|
899
927
|
|
|
900
928
|
class PromptResourceBinding(Base):
|
|
901
929
|
__tablename__ = "iat_prompt_resource_bindings"
|
|
@@ -492,6 +492,13 @@ class ConfigurationService:
|
|
|
492
492
|
if not config.get("name"):
|
|
493
493
|
add_error("General", "Missing required key: 'name'")
|
|
494
494
|
|
|
495
|
+
mcp_config = config.get("mcp")
|
|
496
|
+
if mcp_config is not None:
|
|
497
|
+
if not isinstance(mcp_config, dict):
|
|
498
|
+
add_error("mcp", "Must be a dictionary.")
|
|
499
|
+
else:
|
|
500
|
+
self._validate_mcp_url_config(mcp_config, add_error)
|
|
501
|
+
|
|
495
502
|
# 2. LLM section
|
|
496
503
|
if not isinstance(config.get("llm"), dict):
|
|
497
504
|
add_error("llm", "Missing or invalid 'llm' section.")
|
|
@@ -784,6 +791,7 @@ class ConfigurationService:
|
|
|
784
791
|
"operations",
|
|
785
792
|
}
|
|
786
793
|
allowed_queue_tiers = {"default", "low"}
|
|
794
|
+
allowed_runtime_providers = {"query_service", "openai_agents"}
|
|
787
795
|
allowed_output_schema_modes = {"best_effort", "strict"}
|
|
788
796
|
allowed_output_response_modes = {"chat_compatible", "structured_only"}
|
|
789
797
|
allowed_attachment_modes = {"extracted_only", "native_only", "native_plus_extracted"}
|
|
@@ -837,6 +845,20 @@ class ConfigurationService:
|
|
|
837
845
|
)
|
|
838
846
|
continue
|
|
839
847
|
|
|
848
|
+
runtime_provider = str(runtime_policy.get("runtime_provider", "") or "").strip().lower()
|
|
849
|
+
if runtime_provider and runtime_provider not in allowed_runtime_providers:
|
|
850
|
+
add_error(
|
|
851
|
+
f"prompts[{i}].runtime_policy.runtime_provider",
|
|
852
|
+
"Unsupported runtime_policy.runtime_provider "
|
|
853
|
+
f"'{runtime_provider}'. Must be one of: {sorted(allowed_runtime_providers)}.",
|
|
854
|
+
)
|
|
855
|
+
continue
|
|
856
|
+
|
|
857
|
+
runtime_config = runtime_policy.get("runtime_config")
|
|
858
|
+
if runtime_config is not None and not isinstance(runtime_config, dict):
|
|
859
|
+
add_error(f"prompts[{i}].runtime_policy.runtime_config", "Must be a dictionary.")
|
|
860
|
+
continue
|
|
861
|
+
|
|
840
862
|
if prompt_cat and prompt_cat not in category_set:
|
|
841
863
|
add_error(f"prompts[{i}]", f"Category '{prompt_cat}' is not defined in 'prompt_categories'.")
|
|
842
864
|
|
|
@@ -1238,6 +1260,21 @@ class ConfigurationService:
|
|
|
1238
1260
|
|
|
1239
1261
|
return errors
|
|
1240
1262
|
|
|
1263
|
+
@staticmethod
|
|
1264
|
+
def _validate_mcp_url_config(mcp_config: dict, add_error) -> None:
|
|
1265
|
+
for key in ("server_url", "public_server_url", "public_url", "public_base_url", "base_url", "public_base"):
|
|
1266
|
+
if key not in mcp_config or mcp_config.get(key) in (None, ""):
|
|
1267
|
+
continue
|
|
1268
|
+
raw_url = str(mcp_config.get(key) or "").strip()
|
|
1269
|
+
if not raw_url:
|
|
1270
|
+
continue
|
|
1271
|
+
if any(ch.isspace() for ch in raw_url):
|
|
1272
|
+
add_error(f"mcp.{key}", "Whitespace is not allowed.")
|
|
1273
|
+
continue
|
|
1274
|
+
parsed = urlparse(raw_url)
|
|
1275
|
+
if parsed.scheme != "https" or not parsed.netloc:
|
|
1276
|
+
add_error(f"mcp.{key}", "URL must be absolute HTTPS.")
|
|
1277
|
+
|
|
1241
1278
|
|
|
1242
1279
|
def _set_nested_value(self, data: dict, key: str, value):
|
|
1243
1280
|
"""
|
|
@@ -4,6 +4,8 @@ import hashlib
|
|
|
4
4
|
import os
|
|
5
5
|
import secrets
|
|
6
6
|
from datetime import datetime, timedelta
|
|
7
|
+
from typing import Any
|
|
8
|
+
from urllib.parse import quote, urlparse
|
|
7
9
|
|
|
8
10
|
from injector import inject
|
|
9
11
|
from sqlalchemy.exc import IntegrityError
|
|
@@ -12,6 +14,7 @@ from iatoolkit.common.util import Utility
|
|
|
12
14
|
from iatoolkit.repositories.mcp_token_repo import McpTokenRepo
|
|
13
15
|
from iatoolkit.repositories.models import McpToken
|
|
14
16
|
from iatoolkit.repositories.profile_repo import ProfileRepo
|
|
17
|
+
from iatoolkit.services.configuration_service import ConfigurationService
|
|
15
18
|
from iatoolkit.services.i18n_service import I18nService
|
|
16
19
|
|
|
17
20
|
|
|
@@ -28,11 +31,13 @@ class McpTokenService:
|
|
|
28
31
|
profile_repo: ProfileRepo,
|
|
29
32
|
token_repo: McpTokenRepo,
|
|
30
33
|
utility: Utility,
|
|
34
|
+
configuration_service: ConfigurationService | None = None,
|
|
31
35
|
):
|
|
32
36
|
self.i18n_service = i18n_service
|
|
33
37
|
self.profile_repo = profile_repo
|
|
34
38
|
self.token_repo = token_repo
|
|
35
39
|
self.utility = utility
|
|
40
|
+
self.configuration_service = configuration_service
|
|
36
41
|
|
|
37
42
|
def list_user_tokens(self, company_short_name: str, user_identifier: str) -> dict:
|
|
38
43
|
company, error = self._get_company(company_short_name)
|
|
@@ -136,7 +141,7 @@ class McpTokenService:
|
|
|
136
141
|
return {"error": self.i18n_service.t("errors.auth.mcp_pat_token_unavailable"), "status_code": 409}
|
|
137
142
|
|
|
138
143
|
raw_token = self.utility.decrypt_key(token.token_encrypted)
|
|
139
|
-
mcp_server_url = self.
|
|
144
|
+
mcp_server_url = self.resolve_mcp_server_url(company_short_name)
|
|
140
145
|
payload = self._token_to_dict(token)
|
|
141
146
|
payload["token"] = raw_token
|
|
142
147
|
payload["mcp_server_url"] = mcp_server_url
|
|
@@ -172,6 +177,48 @@ class McpTokenService:
|
|
|
172
177
|
"token_id": token.id,
|
|
173
178
|
}
|
|
174
179
|
|
|
180
|
+
def resolve_mcp_server_url(self, company_short_name: str) -> str:
|
|
181
|
+
configured_url = self._configured_mcp_server_url(company_short_name)
|
|
182
|
+
if configured_url:
|
|
183
|
+
return configured_url
|
|
184
|
+
return self.build_mcp_server_url(company_short_name)
|
|
185
|
+
|
|
186
|
+
def _configured_mcp_server_url(self, company_short_name: str) -> str | None:
|
|
187
|
+
if self.configuration_service is None:
|
|
188
|
+
return None
|
|
189
|
+
try:
|
|
190
|
+
mcp_config = self.configuration_service.get_configuration(company_short_name, "mcp") or {}
|
|
191
|
+
except Exception:
|
|
192
|
+
return None
|
|
193
|
+
if not isinstance(mcp_config, dict):
|
|
194
|
+
return None
|
|
195
|
+
raw_url = (
|
|
196
|
+
mcp_config.get("server_url")
|
|
197
|
+
or mcp_config.get("public_server_url")
|
|
198
|
+
or mcp_config.get("public_url")
|
|
199
|
+
)
|
|
200
|
+
if not raw_url:
|
|
201
|
+
raw_base_url = (
|
|
202
|
+
mcp_config.get("public_base_url")
|
|
203
|
+
or mcp_config.get("base_url")
|
|
204
|
+
or mcp_config.get("public_base")
|
|
205
|
+
)
|
|
206
|
+
if raw_base_url:
|
|
207
|
+
raw_url = f"{str(raw_base_url).rstrip('/')}/{quote(str(company_short_name or '').strip(), safe='')}/mcp"
|
|
208
|
+
return self._normalize_mcp_server_url(raw_url, company_short_name=company_short_name)
|
|
209
|
+
|
|
210
|
+
@staticmethod
|
|
211
|
+
def _normalize_mcp_server_url(raw_url: Any, *, company_short_name: str) -> str | None:
|
|
212
|
+
url = str(raw_url or "").strip()
|
|
213
|
+
if not url:
|
|
214
|
+
return None
|
|
215
|
+
if any(ch.isspace() for ch in url):
|
|
216
|
+
raise ValueError(f"Invalid MCP server_url for tenant '{company_short_name}': whitespace is not allowed.")
|
|
217
|
+
parsed = urlparse(url)
|
|
218
|
+
if parsed.scheme != "https" or not parsed.netloc:
|
|
219
|
+
raise ValueError(f"Invalid MCP server_url for tenant '{company_short_name}': URL must be absolute HTTPS.")
|
|
220
|
+
return url.rstrip("/")
|
|
221
|
+
|
|
175
222
|
@staticmethod
|
|
176
223
|
def build_mcp_server_url(company_short_name: str) -> str:
|
|
177
224
|
public_base_url = str(
|
|
@@ -180,7 +227,8 @@ class McpTokenService:
|
|
|
180
227
|
or "https://mcp.iatoolkit.com"
|
|
181
228
|
).strip()
|
|
182
229
|
public_base_url = public_base_url.rstrip("/")
|
|
183
|
-
|
|
230
|
+
tenant = quote(str(company_short_name or "").strip(), safe="")
|
|
231
|
+
return f"{public_base_url}/{tenant}/mcp"
|
|
184
232
|
|
|
185
233
|
@staticmethod
|
|
186
234
|
def build_mcp_connection_snippet(
|
|
@@ -15,6 +15,7 @@ from collections import defaultdict
|
|
|
15
15
|
from iatoolkit.repositories.models import (
|
|
16
16
|
Prompt,
|
|
17
17
|
PromptAgentRole,
|
|
18
|
+
PromptRuntimeProvider,
|
|
18
19
|
PromptCategory,
|
|
19
20
|
Company,
|
|
20
21
|
)
|
|
@@ -51,6 +52,8 @@ class PromptService:
|
|
|
51
52
|
TOOL_POLICY_MODE_EXPLICIT = "explicit"
|
|
52
53
|
QUEUE_TIER_DEFAULT = "default"
|
|
53
54
|
QUEUE_TIER_LOW = "low"
|
|
55
|
+
RUNTIME_PROVIDER_QUERY_SERVICE = PromptRuntimeProvider.QUERY_SERVICE.value
|
|
56
|
+
RUNTIME_PROVIDER_OPENAI_AGENTS = PromptRuntimeProvider.OPENAI_AGENTS.value
|
|
54
57
|
EXECUTION_MODE_CONVERSATIONAL = "conversational"
|
|
55
58
|
EXECUTION_MODE_AGENTIC = "agentic"
|
|
56
59
|
AGENT_ROLE_WORKSPACE_CHAT = PromptAgentRole.WORKSPACE_CHAT.value
|
|
@@ -250,11 +253,27 @@ class PromptService:
|
|
|
250
253
|
return candidate
|
|
251
254
|
return cls.QUEUE_TIER_DEFAULT
|
|
252
255
|
|
|
256
|
+
@classmethod
|
|
257
|
+
def normalize_runtime_provider_value(cls, runtime_provider: str | None) -> str:
|
|
258
|
+
candidate = str(runtime_provider or cls.RUNTIME_PROVIDER_QUERY_SERVICE).strip().lower()
|
|
259
|
+
if candidate in {
|
|
260
|
+
cls.RUNTIME_PROVIDER_QUERY_SERVICE,
|
|
261
|
+
cls.RUNTIME_PROVIDER_OPENAI_AGENTS,
|
|
262
|
+
}:
|
|
263
|
+
return candidate
|
|
264
|
+
return cls.RUNTIME_PROVIDER_QUERY_SERVICE
|
|
265
|
+
|
|
266
|
+
@classmethod
|
|
267
|
+
def normalize_runtime_config(cls, runtime_config: dict | None) -> dict:
|
|
268
|
+
return dict(runtime_config or {}) if isinstance(runtime_config, dict) else {}
|
|
269
|
+
|
|
253
270
|
@classmethod
|
|
254
271
|
def normalize_runtime_policy(cls, runtime_policy: dict | None) -> dict:
|
|
255
272
|
policy = runtime_policy if isinstance(runtime_policy, dict) else {}
|
|
256
273
|
role = cls.normalize_agent_role_value(policy.get("role"))
|
|
257
274
|
queue_tier = cls.normalize_queue_tier_value(policy.get("queue_tier"))
|
|
275
|
+
runtime_provider = cls.normalize_runtime_provider_value(policy.get("runtime_provider"))
|
|
276
|
+
runtime_config = cls.normalize_runtime_config(policy.get("runtime_config"))
|
|
258
277
|
raw_context = policy.get("context")
|
|
259
278
|
context = cls.normalize_context_policy(
|
|
260
279
|
raw_context if isinstance(raw_context, dict) else None,
|
|
@@ -265,6 +284,8 @@ class PromptService:
|
|
|
265
284
|
"role": role,
|
|
266
285
|
"queue_tier": queue_tier,
|
|
267
286
|
"context": context,
|
|
287
|
+
"runtime_provider": runtime_provider,
|
|
288
|
+
"runtime_config": runtime_config,
|
|
268
289
|
}
|
|
269
290
|
|
|
270
291
|
@classmethod
|
|
@@ -279,6 +300,17 @@ class PromptService:
|
|
|
279
300
|
def get_runtime_policy_context(cls, runtime_policy: dict | None) -> dict:
|
|
280
301
|
return cls.normalize_runtime_policy(runtime_policy).get("context", cls.default_context_policy_for_agent_role(None))
|
|
281
302
|
|
|
303
|
+
@classmethod
|
|
304
|
+
def get_runtime_policy_provider(cls, runtime_policy: dict | None) -> str:
|
|
305
|
+
return cls.normalize_runtime_policy(runtime_policy).get(
|
|
306
|
+
"runtime_provider",
|
|
307
|
+
cls.RUNTIME_PROVIDER_QUERY_SERVICE,
|
|
308
|
+
)
|
|
309
|
+
|
|
310
|
+
@classmethod
|
|
311
|
+
def get_runtime_policy_config(cls, runtime_policy: dict | None) -> dict:
|
|
312
|
+
return cls.normalize_runtime_policy(runtime_policy).get("runtime_config", {})
|
|
313
|
+
|
|
282
314
|
def _normalize_output_schema_mode(self, output_schema_mode: str | None) -> str:
|
|
283
315
|
candidate = str(output_schema_mode or self.OUTPUT_SCHEMA_MODE_BEST_EFFORT).strip().lower()
|
|
284
316
|
allowed = {
|
|
@@ -689,6 +721,8 @@ class PromptService:
|
|
|
689
721
|
'llm_request_options': dict(getattr(p, 'llm_request_options', None) or {}),
|
|
690
722
|
'tool_policy': dict(getattr(p, 'tool_policy', None) or {}),
|
|
691
723
|
'context_policy': runtime_policy["context"],
|
|
724
|
+
'runtime_provider': runtime_policy["runtime_provider"],
|
|
725
|
+
'runtime_config': runtime_policy["runtime_config"],
|
|
692
726
|
})
|
|
693
727
|
|
|
694
728
|
categorized_prompts.append({
|
|
@@ -809,6 +843,16 @@ class PromptService:
|
|
|
809
843
|
"role": role_value,
|
|
810
844
|
"queue_tier": queue_tier_value,
|
|
811
845
|
"context": context_value,
|
|
846
|
+
"runtime_provider": data.get(
|
|
847
|
+
"runtime_provider",
|
|
848
|
+
getattr(existing_prompt, "runtime_provider", existing_runtime_policy["runtime_provider"])
|
|
849
|
+
if existing_prompt is not None else existing_runtime_policy["runtime_provider"],
|
|
850
|
+
),
|
|
851
|
+
"runtime_config": data.get(
|
|
852
|
+
"runtime_config",
|
|
853
|
+
getattr(existing_prompt, "runtime_config", existing_runtime_policy["runtime_config"])
|
|
854
|
+
if existing_prompt is not None else existing_runtime_policy["runtime_config"],
|
|
855
|
+
),
|
|
812
856
|
})
|
|
813
857
|
agent_role = runtime_policy["role"]
|
|
814
858
|
force_free_text_output = (
|
|
@@ -57,6 +57,8 @@ class PromptApiView(MethodView):
|
|
|
57
57
|
meta["execution_mode"] = PromptService.execution_mode_for_agent_role(agent_role)
|
|
58
58
|
meta["queue_tier"] = runtime_policy["queue_tier"]
|
|
59
59
|
meta["context_policy"] = runtime_policy["context"]
|
|
60
|
+
meta["runtime_provider"] = runtime_policy["runtime_provider"]
|
|
61
|
+
meta["runtime_config"] = runtime_policy["runtime_config"]
|
|
60
62
|
|
|
61
63
|
return jsonify({
|
|
62
64
|
"meta": meta,
|
|
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
|
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py
RENAMED
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/memory_lint_trigger.py
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py
RENAMED
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/common/interfaces/web_search_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/core_identity.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/email_output.prompt
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/format_styles.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/html_structures.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/links_documents.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/output_basics.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/connectors/file_connector_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/connectors/google_drive_connector.py
RENAMED
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/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.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.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
|
{iatoolkit-2.48.0 → iatoolkit-2.49.0}/src/iatoolkit/repositories/filesystem_asset_repository.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|