iatoolkit 2.71.1__tar.gz → 2.72.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.71.1/src/iatoolkit.egg-info → iatoolkit-2.72.1}/PKG-INFO +1 -1
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/__init__.py +1 -1
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/access.py +16 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/locales/en.yaml +104 -1
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/locales/es.yaml +104 -1
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/company_context_service.py +4 -1
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/context_builder_service.py +33 -4
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/dispatcher_service.py +20 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/query_service.py +9 -4
- iatoolkit-2.72.1/src/iatoolkit/services/resource_access_scope.py +161 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/tool_service.py +7 -1
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/base_login_view.py +3 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/chat_view.py +3 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/login_view.py +3 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/wiki_page_view.py +6 -1
- {iatoolkit-2.71.1 → iatoolkit-2.72.1/src/iatoolkit.egg-info}/PKG-INFO +1 -1
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit.egg-info/SOURCES.txt +1 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/LICENSE +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/LICENSE_COMMUNITY.md +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/pyproject.toml +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/readme.md +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/setup.cfg +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/base_company.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/cli_commands.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/__init__.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/bridge_validation.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/company_paths.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/exceptions.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/interfaces/__init__.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/memory_tools.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/model_registry.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/routes.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/search_terms.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/secret_resolver.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/session_manager.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/text_splitter.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/url_safety.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/common/util.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/company_registry.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/__init__.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_agents/memory_compiler.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_agents/memory_correction.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_agents/memory_document_ingest.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_agents/memory_image_ingest.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_agents/memory_meeting_ingest.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_agents/memory_question_review.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_agents_pack.yaml +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/core.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/__init__.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/call_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/connectors/__init__.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/google_auth_client.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/google_chat_app.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/inference_handler.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_proxy.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/llm_response.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/infra/redis_session_manager.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/__init__.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/advisory_lock.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/api_key_repo.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/bridge_repo.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/database_manager.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/document_repo.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/memory_question_repo.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/memory_repo.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/memory_usage_repo.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/models.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/profile_repo.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/repositories/vs_repo.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/runtime_logging.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/__init__.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/api_key_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/attachment_policy_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/auth_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/branding_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/configuration_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/embedding_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/excel_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/file_processor_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/history_manager_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/http_tool_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/i18n_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/inference_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/jwt_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/knowledge_base_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/language_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/license_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/llm_client_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/mail_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/mcp_token_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/memory_compiler_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/memory_question_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/memory_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/memory_sources.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/memory_usage_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/memory_wiki_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/operator_identity_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/__init__.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/contracts.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/parsers/validator.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/pdf_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/profile_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/prompt_resource_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/prompt_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/sql_dataset_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/sql_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/sql_source_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/storage_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/structured_output_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/system_agent_catalog.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/system_agent_runner.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/system_tools.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/telemetry_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/tool_output_contract.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/user_feedback_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/user_session_context_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/visual_kb_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/visual_tool_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/warmup_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/web_search/__init__.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/web_search_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/services/wiki_page_index_service.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/images/favicon.ico +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/images/favicon.png +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/images/fernando.jpeg +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_filepond.js +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_header_navigation.js +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_help_content.js +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_history_button.js +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_main.js +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/account.css +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/chat_modal.css +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/chat_public.css +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/documents.css +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/landing_page.css +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/llm_output.css +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/onboarding.css +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/static/styles/wiki_page.css +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/_chat_header.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/_company_header.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/_login_widget.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/account.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/base.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/change_password.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/chat.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/chat_modals.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/error.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/forgot_password.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/home_hosted_default.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/login_global.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/onboarding_shell.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/pdf/base.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/pdf/letter.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/pdf/report.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/pdf/simple.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/signup.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/templates/wiki_page.html +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/__init__.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/account_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/api_key_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/categories_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/change_password_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/configuration_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/connectors_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/embedding_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/forgot_password_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/help_content_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/history_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/home_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/init_context_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/llmquery_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/load_document_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/logout_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/memory_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/profile_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/prompt_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/rag_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/root_redirect_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/signup_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/static_page_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/tool_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/users_api_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit/views/verify_user_view.py +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit.egg-info/requires.txt +0 -0
- {iatoolkit-2.71.1 → iatoolkit-2.72.1}/src/iatoolkit.egg-info/top_level.txt +0 -0
|
@@ -176,6 +176,22 @@ def role_assigned(company_short_name: str, user_identifier: str, role: str) -> N
|
|
|
176
176
|
company_short_name, exc)
|
|
177
177
|
|
|
178
178
|
|
|
179
|
+
def filter_llm_models(company_short_name: str, user_identifier: str | None, default_model: str | None,
|
|
180
|
+
models: list[dict]) -> tuple[str | None, list[dict]]:
|
|
181
|
+
"""The chat's model choice limited to the models this person may use (BL-010, Fase 2).
|
|
182
|
+
|
|
183
|
+
When the company's default is not among them, the first one they may use becomes
|
|
184
|
+
their default."""
|
|
185
|
+
if not user_identifier or not Access.registered():
|
|
186
|
+
return default_model, models
|
|
187
|
+
allowed = [m for m in models or [] if can(company_short_name, user_identifier, USE, "model",
|
|
188
|
+
str((m or {}).get("id") or ""))]
|
|
189
|
+
allowed_ids = [str(m.get("id")) for m in allowed]
|
|
190
|
+
if default_model and default_model not in allowed_ids:
|
|
191
|
+
default_model = allowed_ids[0] if allowed_ids else None
|
|
192
|
+
return default_model, allowed
|
|
193
|
+
|
|
194
|
+
|
|
179
195
|
def person_can(company_short_name: str, auth_result: dict | None, level: int, resource_type: str = "company",
|
|
180
196
|
resource_key: str | None = None) -> bool:
|
|
181
197
|
"""A signed-in person's access, from an AuthService result.
|
|
@@ -695,6 +695,61 @@ ui:
|
|
|
695
695
|
access_all_resources: "every resource"
|
|
696
696
|
access_company: "the company"
|
|
697
697
|
access_title: "Access"
|
|
698
|
+
access_usage: "Usage"
|
|
699
|
+
access_usage_calls: "calls in recent days"
|
|
700
|
+
access_usage_people: "people who used it"
|
|
701
|
+
access_usage_agents: "agents bound to it"
|
|
702
|
+
access_usage_agents_title: "Agents that use it"
|
|
703
|
+
access_usage_no_agents: "No agent is bound to it."
|
|
704
|
+
access_usage_window: "Calls in the last {days} days."
|
|
705
|
+
access_person_title: "What this person sees"
|
|
706
|
+
access_group_title: "What this group can do"
|
|
707
|
+
access_person_company: "Over the company"
|
|
708
|
+
access_person_none: "No resource has its own access yet: they use what the whole company uses."
|
|
709
|
+
access_group_none: "Not listed in any resource's access."
|
|
710
|
+
access_no_access: "no access"
|
|
711
|
+
access_role_owner: "Owner"
|
|
712
|
+
access_role_admin: "Administers"
|
|
713
|
+
access_role_editor: "Edits"
|
|
714
|
+
access_role_user: "Uses"
|
|
715
|
+
access_simulator: "Simulate access"
|
|
716
|
+
access_simulator_hint: "Pick a person and a resource: it tells you whether they can, and why."
|
|
717
|
+
access_sim_person: "Person"
|
|
718
|
+
access_sim_type: "Resource type"
|
|
719
|
+
access_sim_key: "Resource (name or key)"
|
|
720
|
+
access_sim_run: "Simulate"
|
|
721
|
+
access_sim_allowed: "Can"
|
|
722
|
+
access_sim_denied: "Cannot"
|
|
723
|
+
access_sim_groups: "Their groups"
|
|
724
|
+
access_reason_owner: "Owns the company: can do everything."
|
|
725
|
+
access_reason_company_admin: "Administers the company: administers every resource."
|
|
726
|
+
access_reason_company: "By their level over the company."
|
|
727
|
+
access_reason_own_access_list: "The resource has its own list: it depends on whether one of their groups is in it."
|
|
728
|
+
access_reason_type_default: "The resource uses the company's access for its type."
|
|
729
|
+
access_export: "Export"
|
|
730
|
+
access_import: "Import permissions"
|
|
731
|
+
access_import_hint: "Paste an exported YAML. Check what would change first, then apply it."
|
|
732
|
+
access_import_check: "Check changes"
|
|
733
|
+
access_import_apply: "Apply"
|
|
734
|
+
access_import_groups_created: "New groups"
|
|
735
|
+
access_import_groups_updated: "Changed groups"
|
|
736
|
+
access_import_members_added: "Members added"
|
|
737
|
+
access_import_members_removed: "Members removed"
|
|
738
|
+
access_import_resources_set: "Resources with their access"
|
|
739
|
+
access_import_errors: "Errors"
|
|
740
|
+
access_import_nothing: "Nothing to change."
|
|
741
|
+
access_import_done: "Permissions imported."
|
|
742
|
+
access_type_agent: "Agent"
|
|
743
|
+
access_type_tool: "Tool"
|
|
744
|
+
access_type_model: "Model"
|
|
745
|
+
access_type_sql_source: "SQL source"
|
|
746
|
+
access_type_rag_collection: "Collection"
|
|
747
|
+
access_type_memory_folder: "Memory folder"
|
|
748
|
+
access_type_knowledge_wiki: "Wiki"
|
|
749
|
+
access_type_knowledge_table: "Knowledge table"
|
|
750
|
+
access_type_mcp_tool: "MCP tool"
|
|
751
|
+
access_type_company: "The company"
|
|
752
|
+
access_settings_tab: "Settings"
|
|
698
753
|
access_group_owners: "Owners"
|
|
699
754
|
access_group_admins: "Administrators"
|
|
700
755
|
access_group_editors: "Editors"
|
|
@@ -725,6 +780,13 @@ ui:
|
|
|
725
780
|
access_mode_own: "Restricted"
|
|
726
781
|
access_mode_default: "Whole company"
|
|
727
782
|
access_heading_agent: "Who can use this agent?"
|
|
783
|
+
access_heading_tool: "Who can use this tool?"
|
|
784
|
+
access_heading_sql_source: "Who can query this SQL source?"
|
|
785
|
+
access_heading_knowledge_table: "Who can query this table?"
|
|
786
|
+
access_heading_model: "Who can use this model?"
|
|
787
|
+
access_heading_knowledge_wiki: "Who can see this wiki?"
|
|
788
|
+
access_heading_rag_collection: "Who can see this collection?"
|
|
789
|
+
access_heading_memory_folder: "Who can see this folder?"
|
|
728
790
|
access_heading: "Who has access?"
|
|
729
791
|
access_default: "Company access (default)"
|
|
730
792
|
access_default_hint: "Everyone uses it under the company's general permissions. Add a group to restrict it."
|
|
@@ -837,7 +899,7 @@ ui:
|
|
|
837
899
|
mode_external_sync: "External"
|
|
838
900
|
mode_managed_help: "The wiki is edited from this workspace and pages are saved into storage."
|
|
839
901
|
mode_external_sync_help: "The wiki stays read-only in IAToolkit and updates from the configured storage root."
|
|
840
|
-
access_control: "
|
|
902
|
+
access_control: "Page visibility by labels"
|
|
841
903
|
access_mode_off: "Off"
|
|
842
904
|
access_mode_off_help: "Access labels are stored but no page is filtered."
|
|
843
905
|
access_mode_dry_run: "Dry run"
|
|
@@ -1770,6 +1832,19 @@ ui:
|
|
|
1770
1832
|
|
|
1771
1833
|
|
|
1772
1834
|
db_explorer:
|
|
1835
|
+
sql_source_open_detail: "View and configure the source"
|
|
1836
|
+
sql_source_switch: "Switch source"
|
|
1837
|
+
sql_source_tab_connection: "Connection"
|
|
1838
|
+
sql_source_test: "Test connection"
|
|
1839
|
+
sql_source_testing: "Connecting..."
|
|
1840
|
+
sql_source_test_ok: "Connected · {count} tables"
|
|
1841
|
+
sql_source_test_failed: "Could not connect"
|
|
1842
|
+
sql_source_tables_hint: "With the switch off, tick in the list on the left the tables that enter the context."
|
|
1843
|
+
sql_source_pick: "Choose a source"
|
|
1844
|
+
sql_source_none: "No SQL sources yet"
|
|
1845
|
+
sql_source_kind: "SQL source"
|
|
1846
|
+
sql_sources_status_active: "Active"
|
|
1847
|
+
sql_sources_status_inactive: "Inactive"
|
|
1773
1848
|
data_explorer: "Data Explorer"
|
|
1774
1849
|
database_connection: "Database Connection"
|
|
1775
1850
|
tables: "Tables"
|
|
@@ -2581,6 +2656,33 @@ ui:
|
|
|
2581
2656
|
|
|
2582
2657
|
runtime_defaults_card_title: "Runtime defaults"
|
|
2583
2658
|
rag:
|
|
2659
|
+
collections_tab: "Collections"
|
|
2660
|
+
collection_new: "New collection"
|
|
2661
|
+
collection_filter: "Filter collections"
|
|
2662
|
+
collection_pick: "Pick a collection to see its detail."
|
|
2663
|
+
collection_none: "No collections."
|
|
2664
|
+
collection_document: "document"
|
|
2665
|
+
collection_documents: "documents"
|
|
2666
|
+
collection_memory_badge: "Memory folder"
|
|
2667
|
+
collection_tab_general: "General"
|
|
2668
|
+
collection_memory_note: "It is the collection of the Memory folder “{folder}”: it is managed in Memory."
|
|
2669
|
+
collection_description: "Description"
|
|
2670
|
+
collection_description_hint: "The AI reads it to decide when to search this collection."
|
|
2671
|
+
collection_parser: "Document reader"
|
|
2672
|
+
collection_parser_default: "the company's"
|
|
2673
|
+
collection_delete: "Delete collection"
|
|
2674
|
+
collection_delete_only_empty: "Only an empty collection can be deleted: delete its documents first."
|
|
2675
|
+
collection_save: "Save"
|
|
2676
|
+
collection_last_load: "Last load"
|
|
2677
|
+
collection_view_documents: "See its documents"
|
|
2678
|
+
collection_upload: "Upload documents"
|
|
2679
|
+
collection_new_hint: "Group documents so the AI searches them together."
|
|
2680
|
+
collection_name: "Name"
|
|
2681
|
+
collection_create: "Create collection"
|
|
2682
|
+
collection_created: "Collection created."
|
|
2683
|
+
collection_saved: "Collection updated."
|
|
2684
|
+
collection_delete_confirm: "Delete the collection “{name}”?"
|
|
2685
|
+
collection_deleted: "Collection deleted."
|
|
2584
2686
|
ingestion: "Ingestion"
|
|
2585
2687
|
ingestion_description: "Ingest documents into the knowledge base."
|
|
2586
2688
|
workbench: "Workbench"
|
|
@@ -2693,6 +2795,7 @@ errors:
|
|
|
2693
2795
|
company_not_found: "The company {company_short_name} does not exist."
|
|
2694
2796
|
access:
|
|
2695
2797
|
agent_denied: "You do not have access to the agent {prompt_name}."
|
|
2798
|
+
model_denied: "You do not have access to the model {model}."
|
|
2696
2799
|
timeout: "timeout expired."
|
|
2697
2800
|
auth:
|
|
2698
2801
|
invalid_password: "The provided password is incorrect."
|
|
@@ -709,6 +709,61 @@ ui:
|
|
|
709
709
|
access_all_resources: "todos los recursos"
|
|
710
710
|
access_company: "la empresa"
|
|
711
711
|
access_title: "Acceso"
|
|
712
|
+
access_usage: "Uso"
|
|
713
|
+
access_usage_calls: "llamadas en los últimos días"
|
|
714
|
+
access_usage_people: "personas que lo usaron"
|
|
715
|
+
access_usage_agents: "agentes que lo tienen ligado"
|
|
716
|
+
access_usage_agents_title: "Agentes que lo usan"
|
|
717
|
+
access_usage_no_agents: "Ningún agente lo tiene ligado."
|
|
718
|
+
access_usage_window: "Llamadas de los últimos {days} días."
|
|
719
|
+
access_person_title: "Qué ve esta persona"
|
|
720
|
+
access_group_title: "Qué puede este grupo"
|
|
721
|
+
access_person_company: "Sobre la empresa"
|
|
722
|
+
access_person_none: "Ningún recurso tiene acceso propio todavía: usa lo de toda la empresa."
|
|
723
|
+
access_group_none: "No aparece en la lista de acceso de ningún recurso."
|
|
724
|
+
access_no_access: "sin acceso"
|
|
725
|
+
access_role_owner: "Dueño"
|
|
726
|
+
access_role_admin: "Administra"
|
|
727
|
+
access_role_editor: "Edita"
|
|
728
|
+
access_role_user: "Usa"
|
|
729
|
+
access_simulator: "Simular acceso"
|
|
730
|
+
access_simulator_hint: "Elige una persona y un recurso: te dice si puede y por qué."
|
|
731
|
+
access_sim_person: "Persona"
|
|
732
|
+
access_sim_type: "Tipo de recurso"
|
|
733
|
+
access_sim_key: "Recurso (nombre o clave)"
|
|
734
|
+
access_sim_run: "Simular"
|
|
735
|
+
access_sim_allowed: "Puede"
|
|
736
|
+
access_sim_denied: "No puede"
|
|
737
|
+
access_sim_groups: "Sus grupos"
|
|
738
|
+
access_reason_owner: "Es dueño de la empresa: puede todo."
|
|
739
|
+
access_reason_company_admin: "Administra la empresa: administra todos los recursos."
|
|
740
|
+
access_reason_company: "Según su nivel sobre la empresa."
|
|
741
|
+
access_reason_own_access_list: "El recurso tiene lista propia: decide si alguno de sus grupos está en ella."
|
|
742
|
+
access_reason_type_default: "El recurso usa el acceso de la empresa para su tipo."
|
|
743
|
+
access_export: "Exportar"
|
|
744
|
+
access_import: "Importar permisos"
|
|
745
|
+
access_import_hint: "Pega un YAML exportado. Primero revisa qué cambiaría y después aplícalo."
|
|
746
|
+
access_import_check: "Revisar cambios"
|
|
747
|
+
access_import_apply: "Aplicar"
|
|
748
|
+
access_import_groups_created: "Grupos nuevos"
|
|
749
|
+
access_import_groups_updated: "Grupos modificados"
|
|
750
|
+
access_import_members_added: "Miembros que se agregan"
|
|
751
|
+
access_import_members_removed: "Miembros que se quitan"
|
|
752
|
+
access_import_resources_set: "Recursos con su acceso"
|
|
753
|
+
access_import_errors: "Errores"
|
|
754
|
+
access_import_nothing: "No hay nada que cambiar."
|
|
755
|
+
access_import_done: "Permisos importados."
|
|
756
|
+
access_type_agent: "Agente"
|
|
757
|
+
access_type_tool: "Tool"
|
|
758
|
+
access_type_model: "Modelo"
|
|
759
|
+
access_type_sql_source: "Fuente SQL"
|
|
760
|
+
access_type_rag_collection: "Colección"
|
|
761
|
+
access_type_memory_folder: "Carpeta de Memoria"
|
|
762
|
+
access_type_knowledge_wiki: "Wiki"
|
|
763
|
+
access_type_knowledge_table: "Knowledge table"
|
|
764
|
+
access_type_mcp_tool: "Tool MCP"
|
|
765
|
+
access_type_company: "La empresa"
|
|
766
|
+
access_settings_tab: "Configuración"
|
|
712
767
|
access_group_owners: "Dueños"
|
|
713
768
|
access_group_admins: "Administradores"
|
|
714
769
|
access_group_editors: "Editores"
|
|
@@ -739,6 +794,13 @@ ui:
|
|
|
739
794
|
access_mode_own: "Restringido"
|
|
740
795
|
access_mode_default: "Toda la empresa"
|
|
741
796
|
access_heading_agent: "¿Quién puede usar este agente?"
|
|
797
|
+
access_heading_tool: "¿Quién puede usar esta tool?"
|
|
798
|
+
access_heading_sql_source: "¿Quién puede consultar esta fuente SQL?"
|
|
799
|
+
access_heading_knowledge_table: "¿Quién puede consultar esta tabla?"
|
|
800
|
+
access_heading_model: "¿Quién puede usar este modelo?"
|
|
801
|
+
access_heading_knowledge_wiki: "¿Quién puede ver esta wiki?"
|
|
802
|
+
access_heading_rag_collection: "¿Quién puede ver esta colección?"
|
|
803
|
+
access_heading_memory_folder: "¿Quién puede ver esta carpeta?"
|
|
742
804
|
access_heading: "¿Quién tiene acceso?"
|
|
743
805
|
access_default: "Acceso de la empresa (por defecto)"
|
|
744
806
|
access_default_hint: "Lo usan todos según los permisos generales de la empresa. Agrega un grupo para restringirlo."
|
|
@@ -851,7 +913,7 @@ ui:
|
|
|
851
913
|
mode_external_sync: "Externa"
|
|
852
914
|
mode_managed_help: "La wiki se edita desde esta interfaz y guarda sus páginas en storage."
|
|
853
915
|
mode_external_sync_help: "La wiki queda de solo lectura en IAToolkit y se actualiza desde la raíz storage configurada."
|
|
854
|
-
access_control: "
|
|
916
|
+
access_control: "Visibilidad de páginas por etiquetas"
|
|
855
917
|
access_mode_off: "Desactivado"
|
|
856
918
|
access_mode_off_help: "Las etiquetas de acceso se guardan pero no se filtra ninguna página."
|
|
857
919
|
access_mode_dry_run: "Simulación"
|
|
@@ -1786,6 +1848,19 @@ ui:
|
|
|
1786
1848
|
|
|
1787
1849
|
|
|
1788
1850
|
db_explorer:
|
|
1851
|
+
sql_source_open_detail: "Ver y configurar la fuente"
|
|
1852
|
+
sql_source_switch: "Cambiar de fuente"
|
|
1853
|
+
sql_source_tab_connection: "Conexión"
|
|
1854
|
+
sql_source_test: "Probar conexión"
|
|
1855
|
+
sql_source_testing: "Conectando..."
|
|
1856
|
+
sql_source_test_ok: "Conectada · {count} tablas"
|
|
1857
|
+
sql_source_test_failed: "No se pudo conectar"
|
|
1858
|
+
sql_source_tables_hint: "Con el interruptor apagado, marca en la lista de la izquierda las tablas que entran al contexto."
|
|
1859
|
+
sql_source_pick: "Elige una fuente"
|
|
1860
|
+
sql_source_none: "Todavía no hay fuentes SQL"
|
|
1861
|
+
sql_source_kind: "Fuente SQL"
|
|
1862
|
+
sql_sources_status_active: "Activa"
|
|
1863
|
+
sql_sources_status_inactive: "Inactiva"
|
|
1789
1864
|
data_explorer: "Explorador de datos"
|
|
1790
1865
|
database_connection: "Bases de datos"
|
|
1791
1866
|
tables: "Tablas"
|
|
@@ -2599,6 +2674,33 @@ ui:
|
|
|
2599
2674
|
|
|
2600
2675
|
runtime_defaults_card_title: "Valores por defecto en runtime"
|
|
2601
2676
|
rag:
|
|
2677
|
+
collections_tab: "Colecciones"
|
|
2678
|
+
collection_new: "Nueva colección"
|
|
2679
|
+
collection_filter: "Filtrar colecciones"
|
|
2680
|
+
collection_pick: "Elige una colección para ver su detalle."
|
|
2681
|
+
collection_none: "No hay colecciones."
|
|
2682
|
+
collection_document: "documento"
|
|
2683
|
+
collection_documents: "documentos"
|
|
2684
|
+
collection_memory_badge: "Carpeta de Memoria"
|
|
2685
|
+
collection_tab_general: "General"
|
|
2686
|
+
collection_memory_note: "Es la colección de la carpeta de Memoria «{folder}»: se administra en Memoria."
|
|
2687
|
+
collection_description: "Descripción"
|
|
2688
|
+
collection_description_hint: "La IA la lee para decidir cuándo buscar en esta colección."
|
|
2689
|
+
collection_parser: "Lector de documentos"
|
|
2690
|
+
collection_parser_default: "el de la empresa"
|
|
2691
|
+
collection_delete: "Eliminar colección"
|
|
2692
|
+
collection_delete_only_empty: "Solo se elimina una colección vacía: borra antes sus documentos."
|
|
2693
|
+
collection_save: "Guardar"
|
|
2694
|
+
collection_last_load: "Última carga"
|
|
2695
|
+
collection_view_documents: "Ver sus documentos"
|
|
2696
|
+
collection_upload: "Cargar documentos"
|
|
2697
|
+
collection_new_hint: "Agrupa documentos para que la IA los busque juntos."
|
|
2698
|
+
collection_name: "Nombre"
|
|
2699
|
+
collection_create: "Crear colección"
|
|
2700
|
+
collection_created: "Colección creada."
|
|
2701
|
+
collection_saved: "Colección actualizada."
|
|
2702
|
+
collection_delete_confirm: "¿Eliminar la colección «{name}»?"
|
|
2703
|
+
collection_deleted: "Colección eliminada."
|
|
2602
2704
|
ingestion: "Ingesta"
|
|
2603
2705
|
ingestion_description: "Ingestar documentos en la base de conocimiento."
|
|
2604
2706
|
workbench: "Area de trabajo"
|
|
@@ -2708,6 +2810,7 @@ errors:
|
|
|
2708
2810
|
company_not_found: "La empresa {company_short_name} no existe."
|
|
2709
2811
|
access:
|
|
2710
2812
|
agent_denied: "No tienes acceso al agente {prompt_name}."
|
|
2813
|
+
model_denied: "No tienes acceso al modelo {model}."
|
|
2711
2814
|
timeout: "El tiempo de espera ha expirado."
|
|
2712
2815
|
|
|
2713
2816
|
|
|
@@ -52,6 +52,7 @@ class CompanyContextService:
|
|
|
52
52
|
include_sql_context: bool = True,
|
|
53
53
|
include_yaml_context: bool = True,
|
|
54
54
|
selected_context_files: List[str] | None = None,
|
|
55
|
+
allowed_databases: List[str] | None = None,
|
|
55
56
|
) -> dict[str, str]:
|
|
56
57
|
"""
|
|
57
58
|
Builds the full context by aggregating three sources:
|
|
@@ -78,7 +79,9 @@ class CompanyContextService:
|
|
|
78
79
|
# schema expansion and expose SQL through dedicated schema/query tools.
|
|
79
80
|
if include_sql_context:
|
|
80
81
|
try:
|
|
81
|
-
|
|
82
|
+
# allowed_databases: the sources this person may query (BL-010); None is all.
|
|
83
|
+
sql_context, db_tables = self._get_sql_enriched_context(company_short_name,
|
|
84
|
+
allowed_databases=allowed_databases)
|
|
82
85
|
sql_context = sql_context.strip()
|
|
83
86
|
sql_source_table_scopes = self._get_sql_source_table_scopes(company_short_name)
|
|
84
87
|
except Exception as e:
|
|
@@ -199,7 +199,7 @@ class ContextBuilderService:
|
|
|
199
199
|
|
|
200
200
|
# 1. Get user profile
|
|
201
201
|
user_profile = self.profile_service.get_profile_by_identifier(company_short_name, user_identifier)
|
|
202
|
-
available_tools = self.tool_service.get_tools_for_llm(company)
|
|
202
|
+
available_tools = self.tool_service.get_tools_for_llm(company, user_identifier=user_identifier)
|
|
203
203
|
|
|
204
204
|
# 2. Render the base system prompt (iatoolkit standard)
|
|
205
205
|
system_prompt_payload = self.prompt_service.get_system_prompt_payload(
|
|
@@ -223,9 +223,13 @@ class ContextBuilderService:
|
|
|
223
223
|
service_list=available_tools,
|
|
224
224
|
)
|
|
225
225
|
|
|
226
|
-
# 3. Get company specific context (DB Schemas, Docs, etc.)
|
|
227
|
-
|
|
228
|
-
|
|
226
|
+
# 3. Get company specific context (DB Schemas, Docs, etc.), limited to the SQL
|
|
227
|
+
# sources and collections this person may use (BL-010, Fase 2).
|
|
228
|
+
allowed_databases, allowed_collections = self._access_restrictions(company_short_name, user_identifier)
|
|
229
|
+
company_context_blocks = self.company_context_service.get_company_context_blocks(
|
|
230
|
+
company_short_name, allowed_databases=allowed_databases)
|
|
231
|
+
collection_context = "" if allowed_collections == [] else self._build_collection_context(
|
|
232
|
+
company_short_name, collection_names=allowed_collections)
|
|
229
233
|
|
|
230
234
|
final_system_context = self._join_context_sections(
|
|
231
235
|
rendered_sections.get("identity"),
|
|
@@ -274,6 +278,24 @@ class ContextBuilderService:
|
|
|
274
278
|
|
|
275
279
|
return capabilities
|
|
276
280
|
|
|
281
|
+
def _access_restrictions(self, company_short_name: str,
|
|
282
|
+
user_identifier: str | None) -> tuple[list[str] | None, list[str] | None]:
|
|
283
|
+
"""(SQL sources, collections) this person may use; None where nothing is restricted."""
|
|
284
|
+
from iatoolkit.common import access
|
|
285
|
+
if not user_identifier or not access.Access.registered():
|
|
286
|
+
return None, None
|
|
287
|
+
from iatoolkit import current_iatoolkit
|
|
288
|
+
from iatoolkit.services.resource_access_scope import ResourceAccessScope
|
|
289
|
+
from iatoolkit.services.sql_source_service import SqlSourceService
|
|
290
|
+
injector = current_iatoolkit().get_injector()
|
|
291
|
+
scope = injector.get(ResourceAccessScope)
|
|
292
|
+
databases = [str(s.get("database") or "") for s in
|
|
293
|
+
injector.get(SqlSourceService).list_sources(company_short_name, include_inactive=False) or []
|
|
294
|
+
if s.get("database")]
|
|
295
|
+
allowed_databases = scope.allowed_databases(company_short_name, user_identifier, databases)
|
|
296
|
+
return (None if len(allowed_databases) == len(databases) else allowed_databases,
|
|
297
|
+
scope.allowed_collections(company_short_name, user_identifier))
|
|
298
|
+
|
|
277
299
|
def build_agent_system_context(
|
|
278
300
|
self,
|
|
279
301
|
company_short_name: str,
|
|
@@ -312,6 +334,12 @@ class ContextBuilderService:
|
|
|
312
334
|
resource_bindings,
|
|
313
335
|
PromptResourceType.RAG_COLLECTION.value,
|
|
314
336
|
)
|
|
337
|
+
# The agent's sources and collections, minus those this person may not use.
|
|
338
|
+
allowed_databases, allowed_collections = self._access_restrictions(company_short_name, user_identifier)
|
|
339
|
+
if allowed_databases is not None:
|
|
340
|
+
sql_sources = [s for s in sql_sources if s in allowed_databases]
|
|
341
|
+
if allowed_collections is not None:
|
|
342
|
+
rag_collections = [c for c in rag_collections if c in allowed_collections]
|
|
315
343
|
|
|
316
344
|
prompt_capabilities = self._resolve_system_prompt_capabilities(enabled_tools)
|
|
317
345
|
if self.SQL_TOOL_NAME in enabled_tool_names and not sql_sources:
|
|
@@ -370,6 +398,7 @@ class ContextBuilderService:
|
|
|
370
398
|
company_context_policy = context_policy.get("company_context_blocks") or {}
|
|
371
399
|
company_context_blocks = self.company_context_service.get_company_context_blocks(
|
|
372
400
|
company_short_name,
|
|
401
|
+
allowed_databases=allowed_databases,
|
|
373
402
|
include_sql_context=bool(company_context_policy.get("sql_context")),
|
|
374
403
|
include_yaml_context=bool(company_context_policy.get("yaml_context")),
|
|
375
404
|
)
|
|
@@ -56,6 +56,23 @@ class Dispatcher:
|
|
|
56
56
|
self._company_instances = None
|
|
57
57
|
self._company_instances_revision = -1
|
|
58
58
|
|
|
59
|
+
@staticmethod
|
|
60
|
+
def _scope_tool_call(company_short_name: str, function_name: str, user_identifier: str | None,
|
|
61
|
+
kwargs: dict) -> dict:
|
|
62
|
+
from iatoolkit.common import access
|
|
63
|
+
if not user_identifier or not access.Access.registered():
|
|
64
|
+
# No person (internal runs), or no groups (core alone): nothing is restricted.
|
|
65
|
+
return kwargs
|
|
66
|
+
from iatoolkit import current_iatoolkit
|
|
67
|
+
from iatoolkit.services.resource_access_scope import ResourceAccessScope
|
|
68
|
+
try:
|
|
69
|
+
injector = current_iatoolkit().get_injector()
|
|
70
|
+
except Exception:
|
|
71
|
+
# No running IAToolkit (unit tests of the dispatcher alone): nothing to scope with.
|
|
72
|
+
return kwargs
|
|
73
|
+
scope = injector.get(ResourceAccessScope)
|
|
74
|
+
return scope.scope_tool_call(company_short_name, function_name, user_identifier, kwargs)
|
|
75
|
+
|
|
59
76
|
def _safe_rollback(self):
|
|
60
77
|
"""
|
|
61
78
|
Best-effort rollback for the shared scoped session used by repositories.
|
|
@@ -228,6 +245,9 @@ class Dispatcher:
|
|
|
228
245
|
)
|
|
229
246
|
return result
|
|
230
247
|
try:
|
|
248
|
+
# What the person may reach (BL-010, Fase 2): the tool, and the SQL source,
|
|
249
|
+
# collections or wikis the call names or would search.
|
|
250
|
+
kwargs = self._scope_tool_call(company_short_name, function_name, user_identifier, kwargs)
|
|
231
251
|
result = self._dispatch_resolved_tool(
|
|
232
252
|
company_short_name=company_short_name,
|
|
233
253
|
function_name=function_name,
|
|
@@ -1269,7 +1269,7 @@ class QueryService:
|
|
|
1269
1269
|
if not prompt_output_contract:
|
|
1270
1270
|
return {'rebuild_needed': True, 'error': f"Prompt '{prompt_name}' not found"}
|
|
1271
1271
|
|
|
1272
|
-
tools = self.tool_service.get_tools_for_llm(company)
|
|
1272
|
+
tools = self.tool_service.get_tools_for_llm(company, user_identifier=user_identifier)
|
|
1273
1273
|
is_agent_execution = self._is_agentic_execution(prompt_output_contract)
|
|
1274
1274
|
tools, _tool_router_metrics = self._apply_prompt_tool_policy(
|
|
1275
1275
|
company_short_name=company_short_name,
|
|
@@ -1528,6 +1528,11 @@ class QueryService:
|
|
|
1528
1528
|
prompt_output_contract=prompt_output_contract,
|
|
1529
1529
|
)
|
|
1530
1530
|
effective_model = self._resolve_model(company_short_name, model, prompt_output_contract)
|
|
1531
|
+
# Using a model is a level-1 permission over it (BL-010, Fase 2).
|
|
1532
|
+
if effective_model and not access.can(company_short_name, user_identifier, access.USE, "model",
|
|
1533
|
+
effective_model):
|
|
1534
|
+
return {"error": True, "status_code": 403,
|
|
1535
|
+
"error_message": self.i18n_service.t('errors.access.model_denied', model=effective_model)}
|
|
1531
1536
|
output_schema = self._build_output_text_schema_payload(
|
|
1532
1537
|
company_short_name,
|
|
1533
1538
|
effective_model,
|
|
@@ -1616,7 +1621,7 @@ class QueryService:
|
|
|
1616
1621
|
is_agent_execution = self._is_agentic_execution(prompt_output_contract) and not is_agent_session_execution
|
|
1617
1622
|
|
|
1618
1623
|
# get the tools availables for this company
|
|
1619
|
-
tools = self.tool_service.get_tools_for_llm(company)
|
|
1624
|
+
tools = self.tool_service.get_tools_for_llm(company, user_identifier=user_identifier)
|
|
1620
1625
|
log_stage("load_tools")
|
|
1621
1626
|
tools, tool_router_metrics = self._apply_prompt_tool_policy(
|
|
1622
1627
|
company_short_name=company_short_name,
|
|
@@ -1920,7 +1925,7 @@ class QueryService:
|
|
|
1920
1925
|
)
|
|
1921
1926
|
|
|
1922
1927
|
is_agent_execution = self._is_agentic_execution(prompt_output_contract)
|
|
1923
|
-
tools = self.tool_service.get_tools_for_llm(company)
|
|
1928
|
+
tools = self.tool_service.get_tools_for_llm(company, user_identifier=user_identifier)
|
|
1924
1929
|
tools, tool_router_metrics = self._apply_prompt_tool_policy(
|
|
1925
1930
|
company_short_name=company_short_name,
|
|
1926
1931
|
prompt_output_contract=prompt_output_contract,
|
|
@@ -2060,7 +2065,7 @@ class QueryService:
|
|
|
2060
2065
|
effective_model = self._resolve_model(company_short_name, None, {})
|
|
2061
2066
|
provider = self._get_provider(company_short_name, effective_model)
|
|
2062
2067
|
history_type = self._get_history_type(company_short_name, effective_model)
|
|
2063
|
-
tools = self.tool_service.get_tools_for_llm(company)
|
|
2068
|
+
tools = self.tool_service.get_tools_for_llm(company, user_identifier=user_identifier)
|
|
2064
2069
|
runtime_context, _user_profile, selected_system_prompt_keys = self.context_builder.build_system_context(
|
|
2065
2070
|
company_short_name,
|
|
2066
2071
|
user_identifier,
|