iatoolkit 2.74.3__tar.gz → 2.75.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.74.3/src/iatoolkit.egg-info → iatoolkit-2.75.1}/PKG-INFO +1 -1
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/__init__.py +1 -1
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/sql_core.prompt +6 -3
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_tools_pack.yaml +33 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/company_context_service.py +42 -148
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/context_builder_service.py +4 -2
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/dispatcher_service.py +2 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/llm_client_service.py +3 -2
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/prompt_service.py +3 -6
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/resource_access_scope.py +11 -2
- iatoolkit-2.75.1/src/iatoolkit/services/sql_catalog_service.py +260 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/tool_service.py +30 -1
- {iatoolkit-2.74.3 → iatoolkit-2.75.1/src/iatoolkit.egg-info}/PKG-INFO +1 -1
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit.egg-info/SOURCES.txt +1 -1
- iatoolkit-2.74.3/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -1372
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/LICENSE +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/LICENSE_COMMUNITY.md +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/pyproject.toml +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/readme.md +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/setup.cfg +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/base_company.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/cli_commands.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/__init__.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/access.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/bridge_validation.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/company_paths.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/exceptions.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/interfaces/__init__.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/interfaces/history_compaction_trigger.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/memory_tools.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/model_registry.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/routes.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/search_terms.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/secret_resolver.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/session_manager.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/text_splitter.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/url_safety.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/common/util.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/company_registry.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/__init__.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_agents/history_compaction.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_agents/memory_compiler.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_agents/memory_correction.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_agents/memory_document_ingest.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_agents/memory_image_ingest.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_agents/memory_meeting_ingest.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_agents/memory_question_review.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_agents_pack.yaml +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/core.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/__init__.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/call_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/connectors/__init__.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/google_auth_client.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/google_chat_app.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/inference_handler.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/llm_proxy.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/llm_response.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/infra/redis_session_manager.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/locales/en.yaml +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/locales/es.yaml +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/__init__.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/advisory_lock.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/api_key_repo.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/bridge_repo.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/database_manager.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/document_repo.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/memory_question_repo.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/memory_repo.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/memory_usage_repo.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/models.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/profile_repo.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/repositories/vs_repo.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/runtime_logging.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/__init__.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/api_key_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/attachment_policy_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/auth_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/branding_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/configuration_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/embedding_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/excel_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/file_processor_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/history_compaction_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/history_manager_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/http_tool_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/i18n_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/inference_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/jwt_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/knowledge_base_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/language_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/license_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/mail_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/mcp_token_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/memory_compiler_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/memory_question_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/memory_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/memory_sources.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/memory_usage_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/memory_wiki_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/noop_history_compaction_trigger.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/operator_identity_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/parsers/__init__.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/parsers/contracts.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/parsers/validator.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/pdf_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/profile_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/prompt_resource_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/query_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/sql_dataset_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/sql_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/sql_source_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/storage_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/structured_output_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/system_agent_catalog.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/system_agent_runner.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/system_tools.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/telemetry_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/tool_output_contract.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/user_feedback_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/user_session_context_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/visual_kb_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/visual_tool_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/warmup_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/web_search/__init__.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/web_search_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/services/wiki_page_index_service.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/images/favicon.ico +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/images/favicon.png +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/images/fernando.jpeg +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/js/chat_filepond.js +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/js/chat_header_navigation.js +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/js/chat_help_content.js +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/js/chat_history_button.js +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/js/chat_main.js +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/styles/account.css +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/styles/chat_modal.css +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/styles/chat_public.css +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/styles/documents.css +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/styles/landing_page.css +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/styles/llm_output.css +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/styles/onboarding.css +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/static/styles/wiki_page.css +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/_chat_header.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/_company_header.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/_login_widget.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/account.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/base.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/change_password.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/chat.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/chat_modals.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/error.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/forgot_password.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/home_hosted_default.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/login_global.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/onboarding_shell.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/pdf/base.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/pdf/letter.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/pdf/report.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/pdf/simple.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/signup.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/templates/wiki_page.html +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/__init__.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/account_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/api_key_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/base_login_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/categories_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/change_password_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/chat_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/configuration_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/connectors_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/embedding_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/forgot_password_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/help_content_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/history_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/home_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/init_context_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/llmquery_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/load_document_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/login_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/logout_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/memory_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/profile_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/prompt_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/rag_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/root_redirect_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/signup_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/static_page_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/tool_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/users_api_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/verify_user_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit/views/wiki_page_view.py +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit.egg-info/requires.txt +0 -0
- {iatoolkit-2.74.3 → iatoolkit-2.75.1}/src/iatoolkit.egg-info/top_level.txt +0 -0
|
@@ -3,10 +3,13 @@
|
|
|
3
3
|
- Trabaja siempre con el dialecto SQL indicado para la base seleccionada.
|
|
4
4
|
- Antes de escribir la consulta, revisa el contexto de la base y respeta su marcador
|
|
5
5
|
`dialect=...` (por ejemplo `postgresql` o `mysql`).
|
|
6
|
-
-
|
|
6
|
+
- El contexto lista las bases y sus tablas, sin columnas. Antes de escribir la
|
|
7
|
+
consulta, pide con `iat_sql_schema` las columnas de las tablas que vas a usar,
|
|
8
|
+
todas en una sola llamada. Si una columna no aparece, pide la tabla que la tiene
|
|
9
|
+
en vez de suponerla.
|
|
10
|
+
- Usa solo tablas de la lista y columnas que `iat_sql_schema` te haya mostrado.
|
|
7
11
|
No inventes columnas ni supongas nombres parecidos.
|
|
8
|
-
-
|
|
9
|
-
`database_key` correcto.
|
|
12
|
+
- Ejecuta la consulta con `iat_sql_query` y el `database_key` correcto.
|
|
10
13
|
- Si hay mas de una tabla, subconsulta o CTE, califica las columnas con alias
|
|
11
14
|
en `SELECT`, `JOIN`, `ON`, `WHERE`, `GROUP BY`, `HAVING` y `ORDER BY`.
|
|
12
15
|
- No mezcles sintaxis de distintos dialectos en la misma consulta.
|
|
@@ -220,6 +220,39 @@ tools:
|
|
|
220
220
|
required:
|
|
221
221
|
- database_key
|
|
222
222
|
- query
|
|
223
|
+
- function_name: iat_sql_schema
|
|
224
|
+
description: "Columnas de tablas SQL: antes de escribir una consulta para iat_sql_query, pide aquí las columnas de las tablas que vas a usar. El contexto trae la lista de bases y tablas; esta herramienta trae sus columnas, tipos y descripciones. Pide varias tablas en una sola llamada."
|
|
225
|
+
routing:
|
|
226
|
+
force_include_capability: has_sql_sources
|
|
227
|
+
routing_profile:
|
|
228
|
+
tags:
|
|
229
|
+
- sql
|
|
230
|
+
- database
|
|
231
|
+
- schema
|
|
232
|
+
- columns
|
|
233
|
+
intents:
|
|
234
|
+
- Get the columns of SQL tables before writing a query.
|
|
235
|
+
- Inspect the structure of a configured SQL database.
|
|
236
|
+
examples:
|
|
237
|
+
- iat_sql_schema(database_key="erp", table_names=["customers", "orders"])
|
|
238
|
+
cost:
|
|
239
|
+
penalty: 0.05
|
|
240
|
+
latency_class: low
|
|
241
|
+
expensive: false
|
|
242
|
+
parameters:
|
|
243
|
+
type: object
|
|
244
|
+
properties:
|
|
245
|
+
database_key:
|
|
246
|
+
type: string
|
|
247
|
+
description: "Nombre exacto de la base, como aparece en el contexto."
|
|
248
|
+
table_names:
|
|
249
|
+
type: array
|
|
250
|
+
items:
|
|
251
|
+
type: string
|
|
252
|
+
description: "Tablas de esa base cuyas columnas necesitas (hasta 10)."
|
|
253
|
+
required:
|
|
254
|
+
- database_key
|
|
255
|
+
- table_names
|
|
223
256
|
- function_name: iat_document_search
|
|
224
257
|
description: Búsqueda semántica sobre documentos internos de la empresa para traer contexto adicional cuando haga falta. No usar si el usuario pide trabajar exclusivamente con un archivo ya adjunto en el turno actual. Usa metadata_filter solo cuando el usuario o el contexto indiquen un filtro de metadata concreto y necesario; si no hace falta, envía null.
|
|
225
258
|
routing:
|
|
@@ -65,7 +65,6 @@ class CompanyContextService:
|
|
|
65
65
|
sql_context = ""
|
|
66
66
|
yaml_context = ""
|
|
67
67
|
db_tables = []
|
|
68
|
-
sql_source_table_scopes = {}
|
|
69
68
|
|
|
70
69
|
# 1. Context from Markdown (context/*.md) files
|
|
71
70
|
try:
|
|
@@ -85,7 +84,6 @@ class CompanyContextService:
|
|
|
85
84
|
allowed_databases=allowed_databases,
|
|
86
85
|
table_filter=table_filter)
|
|
87
86
|
sql_context = sql_context.strip()
|
|
88
|
-
sql_source_table_scopes = self._get_sql_source_table_scopes(company_short_name)
|
|
89
87
|
except Exception as e:
|
|
90
88
|
logging.warning(f"Could not generate SQL context for '{company_short_name}': {e}")
|
|
91
89
|
|
|
@@ -95,7 +93,6 @@ class CompanyContextService:
|
|
|
95
93
|
yaml_schema_context = self._get_yaml_schema_context(
|
|
96
94
|
company_short_name,
|
|
97
95
|
db_tables,
|
|
98
|
-
sql_source_table_scopes=sql_source_table_scopes,
|
|
99
96
|
).strip()
|
|
100
97
|
if yaml_schema_context:
|
|
101
98
|
yaml_context = f"## Esquemas adicionales\n\n{yaml_schema_context}"
|
|
@@ -153,17 +150,6 @@ class CompanyContextService:
|
|
|
153
150
|
logging.warning(f"Could not generate SQL context for '{company_short_name}': {e}")
|
|
154
151
|
return ""
|
|
155
152
|
|
|
156
|
-
def _get_sql_source_table_scopes(self, company_short_name: str) -> dict[str, set[str] | None]:
|
|
157
|
-
scopes: dict[str, set[str] | None] = {}
|
|
158
|
-
sql_sources = self.sql_source_service.list_sources(company_short_name, include_inactive=False)
|
|
159
|
-
|
|
160
|
-
for source in sql_sources:
|
|
161
|
-
db_name = str(source.get("database") or "").strip()
|
|
162
|
-
if not db_name:
|
|
163
|
-
continue
|
|
164
|
-
scopes[db_name] = self._resolve_allowed_tables_for_source(source)
|
|
165
|
-
return scopes
|
|
166
|
-
|
|
167
153
|
def _resolve_allowed_tables_for_source(self, source: dict) -> set[str] | None:
|
|
168
154
|
if bool(source.get("include_all_tables", True)):
|
|
169
155
|
return None
|
|
@@ -181,160 +167,59 @@ class CompanyContextService:
|
|
|
181
167
|
return False
|
|
182
168
|
return bool(cls._table_name_candidates(table_name) & allowed_tables)
|
|
183
169
|
|
|
170
|
+
@property
|
|
171
|
+
def sql_catalog(self):
|
|
172
|
+
"""What of each SQL source a person sees (BL-017); built here, it reads this service's schema."""
|
|
173
|
+
if getattr(self, "_sql_catalog", None) is None:
|
|
174
|
+
from iatoolkit.services.sql_catalog_service import SqlCatalogService
|
|
175
|
+
|
|
176
|
+
self._sql_catalog = SqlCatalogService(self, self.sql_source_service, self.sql_service)
|
|
177
|
+
return self._sql_catalog
|
|
178
|
+
|
|
184
179
|
def _get_sql_enriched_context(self, company_short_name: str, allowed_databases: List[str] | None = None,
|
|
185
180
|
table_filter=None):
|
|
186
181
|
"""
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
and formats it into a prompt-friendly string.
|
|
190
|
-
"""
|
|
191
|
-
sql_sources = self.sql_source_service.list_sources(company_short_name, include_inactive=False)
|
|
192
|
-
if not sql_sources:
|
|
193
|
-
return '', []
|
|
194
|
-
|
|
195
|
-
allowed_database_set = {
|
|
196
|
-
str(database or "").strip()
|
|
197
|
-
for database in (allowed_databases or [])
|
|
198
|
-
if str(database or "").strip()
|
|
199
|
-
}
|
|
200
|
-
if allowed_databases is not None and not allowed_database_set:
|
|
201
|
-
return "", []
|
|
202
|
-
|
|
203
|
-
context_output = []
|
|
204
|
-
db_tables=[]
|
|
205
|
-
|
|
206
|
-
for source in sql_sources:
|
|
207
|
-
db_name = source.get('database')
|
|
208
|
-
if not db_name:
|
|
209
|
-
continue
|
|
210
|
-
if allowed_database_set and db_name not in allowed_database_set:
|
|
211
|
-
continue
|
|
212
|
-
|
|
213
|
-
allowed_tables = self._resolve_allowed_tables_for_source(source)
|
|
214
|
-
|
|
215
|
-
try:
|
|
216
|
-
# 1. Get the Enriched Schema (Physical + YAML)
|
|
217
|
-
enriched_structure = self.get_enriched_database_schema(company_short_name, db_name)
|
|
218
|
-
if not enriched_structure:
|
|
219
|
-
continue
|
|
220
|
-
|
|
221
|
-
if allowed_tables is not None:
|
|
222
|
-
enriched_structure = {
|
|
223
|
-
table_name: table_data
|
|
224
|
-
for table_name, table_data in enriched_structure.items()
|
|
225
|
-
if self._table_is_allowed(table_name, allowed_tables)
|
|
226
|
-
}
|
|
227
|
-
if not enriched_structure:
|
|
228
|
-
continue
|
|
229
|
-
if table_filter is not None:
|
|
230
|
-
# Tables the person may not query (enterprise's knowledge tables, BL-010).
|
|
231
|
-
enriched_structure = {
|
|
232
|
-
table_name: table_data
|
|
233
|
-
for table_name, table_data in enriched_structure.items()
|
|
234
|
-
if table_filter(db_name, table_name)
|
|
235
|
-
}
|
|
236
|
-
if not enriched_structure:
|
|
237
|
-
continue
|
|
238
|
-
|
|
239
|
-
# 2. Build Header for this Database
|
|
240
|
-
dialect = self.sql_service.get_database_dialect(company_short_name, db_name)
|
|
241
|
-
dialect_suffix = f" [dialect={dialect}]" if dialect else ""
|
|
242
|
-
db_context = f"### Base SQL (`database_key`): {db_name}{dialect_suffix}\n"
|
|
243
|
-
|
|
244
|
-
# Optional: Add DB description from config if available (useful context)
|
|
245
|
-
db_desc = source.get('description', '')
|
|
246
|
-
if db_desc:
|
|
247
|
-
db_context += f"- Descripcion: {db_desc}\n"
|
|
248
|
-
|
|
249
|
-
db_context += (
|
|
250
|
-
f"- Usa `iat_sql_query` con `database_key='{db_name}'` para consultar esta base.\n"
|
|
251
|
-
)
|
|
252
|
-
|
|
253
|
-
# 3. Format Tables
|
|
254
|
-
for table_name, table_data in enriched_structure.items():
|
|
255
|
-
table_desc = table_data.get('description', '')
|
|
256
|
-
columns = table_data.get('columns', [])
|
|
257
|
-
|
|
258
|
-
# Table Header
|
|
259
|
-
table_str = f"\n\n#### Tabla: `{table_name}`"
|
|
260
|
-
if table_desc:
|
|
261
|
-
table_str += f"\n- Descripcion: {table_desc}"
|
|
182
|
+
The SQL block of the base context: a map of each source the person may
|
|
183
|
+
query, its tables with a one-line description and no columns (BL-017).
|
|
262
184
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
col_props = col.get('properties') # Nested JSONB structure
|
|
271
|
-
|
|
272
|
-
col_line = f"\n - `{col_name}` ({col_type})"
|
|
273
|
-
if col_desc:
|
|
274
|
-
col_line += f": {col_desc}"
|
|
275
|
-
|
|
276
|
-
table_str += col_line
|
|
277
|
-
|
|
278
|
-
# If it has nested properties (JSONB enriched from YAML), format them
|
|
279
|
-
if col_props:
|
|
280
|
-
table_str += "\n"
|
|
281
|
-
table_str += self._format_json_schema(col_props, 2) # Indent level 2
|
|
282
|
-
|
|
283
|
-
db_context += table_str
|
|
284
|
-
|
|
285
|
-
# collect the table names for later use
|
|
286
|
-
db_tables.append(
|
|
287
|
-
{'db_name': db_name,
|
|
288
|
-
'table_name': table_name,
|
|
289
|
-
}
|
|
290
|
-
)
|
|
291
|
-
|
|
292
|
-
context_output.append(db_context)
|
|
293
|
-
|
|
294
|
-
except Exception as e:
|
|
295
|
-
logging.warning(f"Could not generate enriched SQL context for '{db_name}': {e}")
|
|
296
|
-
|
|
297
|
-
if not context_output:
|
|
298
|
-
return "", []
|
|
299
|
-
|
|
300
|
-
header = (
|
|
301
|
-
"## Bases de datos SQL disponibles\n\n"
|
|
302
|
-
"Estas son las bases SQL que puedes consultar usando `iat_sql_query`. "
|
|
303
|
-
"El schema a continuacion incluye metadata enriquecida.\n"
|
|
185
|
+
The columns travel only when a question needs them, through
|
|
186
|
+
`iat_sql_schema`: the whole schema in the base context was resent on
|
|
187
|
+
every model call and never compacted (~33k tokens at Maxxa).
|
|
188
|
+
Returns the block and the (db_name, table_name) pairs it covers.
|
|
189
|
+
"""
|
|
190
|
+
sources = self.sql_catalog.sources(
|
|
191
|
+
company_short_name, allowed_databases=allowed_databases, table_filter=table_filter,
|
|
304
192
|
)
|
|
305
|
-
|
|
306
|
-
|
|
193
|
+
db_tables = [
|
|
194
|
+
{"db_name": source["database_key"], "table_name": table["name"]}
|
|
195
|
+
for source in sources
|
|
196
|
+
for table in source["tables"]
|
|
197
|
+
]
|
|
198
|
+
return self.sql_catalog.render_map(sources), db_tables
|
|
307
199
|
|
|
308
200
|
def _get_yaml_schema_context(
|
|
309
201
|
self,
|
|
310
202
|
company_short_name: str,
|
|
311
203
|
db_tables: List[Dict],
|
|
312
|
-
sql_source_table_scopes: dict[str, set[str] | None] | None = None,
|
|
313
204
|
) -> str:
|
|
314
205
|
# Get context from .yaml schema files using the repository
|
|
315
206
|
yaml_schema_context = ''
|
|
316
|
-
sql_source_table_scopes = sql_source_table_scopes or {}
|
|
317
207
|
|
|
318
208
|
try:
|
|
319
209
|
# 1. List yaml files in the schema "folder"
|
|
320
210
|
schema_files = self.asset_repo.list_files(company_short_name, AssetType.SCHEMA, extension='.yaml')
|
|
321
211
|
|
|
212
|
+
# A `<db>-<table>.yaml` of a configured SQL source belongs to the SQL
|
|
213
|
+
# schema, never to this block: it reaches the model through the
|
|
214
|
+
# catalogue (map + iat_sql_schema), which applies every filter. Read
|
|
215
|
+
# here, a table hidden from a person (a knowledge table they may not
|
|
216
|
+
# use) came back whole as an "additional schema".
|
|
217
|
+
sql_source_names = self._configured_sql_source_names(company_short_name)
|
|
218
|
+
|
|
322
219
|
for filename in schema_files:
|
|
323
|
-
# skip tables that are already in the SQL context
|
|
324
220
|
if '-' in filename:
|
|
325
|
-
dbname
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
exists = any(
|
|
329
|
-
item["db_name"] == dbname
|
|
330
|
-
and bool(self._table_name_candidates(item["table_name"]) & self._table_name_candidates(table_name))
|
|
331
|
-
for item in db_tables
|
|
332
|
-
)
|
|
333
|
-
if exists:
|
|
334
|
-
continue
|
|
335
|
-
|
|
336
|
-
allowed_tables = sql_source_table_scopes.get(dbname)
|
|
337
|
-
if dbname in sql_source_table_scopes and not self._table_is_allowed(table_name, allowed_tables):
|
|
221
|
+
dbname = self._normalize_identifier(filename.split("-", 1)[0])
|
|
222
|
+
if dbname in sql_source_names:
|
|
338
223
|
continue
|
|
339
224
|
|
|
340
225
|
try:
|
|
@@ -357,6 +242,15 @@ class CompanyContextService:
|
|
|
357
242
|
|
|
358
243
|
return yaml_schema_context
|
|
359
244
|
|
|
245
|
+
def _configured_sql_source_names(self, company_short_name: str) -> set[str]:
|
|
246
|
+
"""Every SQL source of the company, active or not, by normalized name."""
|
|
247
|
+
try:
|
|
248
|
+
sources = self.sql_source_service.list_sources(company_short_name, include_inactive=True) or []
|
|
249
|
+
except Exception as e:
|
|
250
|
+
logging.warning(f"Could not list the SQL sources of '{company_short_name}': {e}")
|
|
251
|
+
return set()
|
|
252
|
+
return {self._normalize_identifier(s.get("database")) for s in sources if s.get("database")}
|
|
253
|
+
|
|
360
254
|
def generate_schema_table(self, schema: dict) -> str:
|
|
361
255
|
if not schema or not isinstance(schema, dict):
|
|
362
256
|
return ""
|
|
@@ -403,8 +403,10 @@ class ContextBuilderService:
|
|
|
403
403
|
company_short_name,
|
|
404
404
|
allowed_databases=allowed_databases,
|
|
405
405
|
table_filter=access.sql_table_filter(company_short_name, user_identifier),
|
|
406
|
-
|
|
407
|
-
|
|
406
|
+
# Only the Markdown block reaches an agent; its SQL is its bound sources
|
|
407
|
+
# (sql_context above), never the global map or the residual YAML.
|
|
408
|
+
include_sql_context=False,
|
|
409
|
+
include_yaml_context=False,
|
|
408
410
|
)
|
|
409
411
|
markdown_context = (
|
|
410
412
|
company_context_blocks.get("markdown_context")
|
|
@@ -33,6 +33,8 @@ class Dispatcher:
|
|
|
33
33
|
"iat_memory_answer_question",
|
|
34
34
|
"iat_wiki_search",
|
|
35
35
|
"iat_wiki_get_page",
|
|
36
|
+
# The schema shown is the person's: their sources and tables (BL-017).
|
|
37
|
+
"iat_sql_schema",
|
|
36
38
|
}
|
|
37
39
|
_tool_execution_hook = None
|
|
38
40
|
# Tool types this module executes itself; an extension cannot take them over.
|
|
@@ -1606,8 +1606,9 @@ class llmClient:
|
|
|
1606
1606
|
sql {sql_query}
|
|
1607
1607
|
|
|
1608
1608
|
**INSTRUCCIÓN OBLIGATORIA:**
|
|
1609
|
-
1. Analiza el error y corrige la
|
|
1610
|
-
|
|
1609
|
+
1. Analiza el error y corrige la consulta SQL anterior. Si dice que una columna o una tabla
|
|
1610
|
+
no existe, pide primero sus columnas reales con `iat_sql_schema`; no adivines otro nombre.
|
|
1611
|
+
2. Llama a la herramienta `{function_name}` **OTRA VEZ** con la consulta corregida.
|
|
1611
1612
|
3. **NO** respondas al usuario con este mensaje de error. Tu ÚNICA acción debe ser volver a llamar a la herramienta con la solución.
|
|
1612
1613
|
"""
|
|
1613
1614
|
|
|
@@ -62,10 +62,11 @@ class PromptService:
|
|
|
62
62
|
AGENT_ROLE_CHANNELS = PromptAgentRole.CHANNELS.value
|
|
63
63
|
AGENT_ROLE_OPERATIONS = PromptAgentRole.OPERATIONS.value
|
|
64
64
|
DEFAULT_CATEGORY_LABEL = "General"
|
|
65
|
+
# An agent's SQL comes only from the sources bound to it: "Global SQL" and
|
|
66
|
+
# "YAML" were removed, neither ever reached the agent's context. A stored
|
|
67
|
+
# policy that still names sql_context or yaml_context loads; the key is ignored.
|
|
65
68
|
COMPANY_CONTEXT_BLOCK_KEYS = {
|
|
66
69
|
"markdown_context",
|
|
67
|
-
"sql_context",
|
|
68
|
-
"yaml_context",
|
|
69
70
|
}
|
|
70
71
|
|
|
71
72
|
@inject
|
|
@@ -187,14 +188,10 @@ class PromptService:
|
|
|
187
188
|
if normalized == cls.AGENT_ROLE_WORKSPACE_CHAT:
|
|
188
189
|
blocks = {
|
|
189
190
|
"markdown_context": True,
|
|
190
|
-
"sql_context": True,
|
|
191
|
-
"yaml_context": True,
|
|
192
191
|
}
|
|
193
192
|
else:
|
|
194
193
|
blocks = {
|
|
195
194
|
"markdown_context": True,
|
|
196
|
-
"sql_context": False,
|
|
197
|
-
"yaml_context": False,
|
|
198
195
|
}
|
|
199
196
|
return {
|
|
200
197
|
"company_context_blocks": blocks,
|
|
@@ -32,7 +32,16 @@ from iatoolkit.common.exceptions import IAToolkitException
|
|
|
32
32
|
from iatoolkit.repositories.database_manager import DatabaseManager
|
|
33
33
|
from iatoolkit.repositories.models import CollectionType, Company, Document, KnowledgeWiki
|
|
34
34
|
|
|
35
|
-
SQL_TOOLS = frozenset({"iat_sql_query"})
|
|
35
|
+
SQL_TOOLS = frozenset({"iat_sql_query", "iat_sql_schema"})
|
|
36
|
+
#: Tools whose access follows another tool's (BL-017): whoever may query may read
|
|
37
|
+
#: the schema of what they query, and nobody else. Without this a new tool falls
|
|
38
|
+
#: to the type default and can end up wider or narrower than the one it serves.
|
|
39
|
+
TOOL_ACCESS_ALIASES = {"iat_sql_schema": "iat_sql_query"}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def tool_access_key(function_name: str) -> str:
|
|
43
|
+
"""The tool name whose access list decides this tool's access."""
|
|
44
|
+
return TOOL_ACCESS_ALIASES.get(function_name, function_name)
|
|
36
45
|
COLLECTION_TOOLS = frozenset({"iat_document_search", "iat_document_list", "iat_image_search", "iat_visual_search"})
|
|
37
46
|
DOCUMENT_READ_TOOLS = frozenset({"iat_document_read"})
|
|
38
47
|
WIKI_TOOLS = frozenset({"iat_wiki_search", "iat_wiki_get_page"})
|
|
@@ -55,7 +64,7 @@ class ResourceAccessScope:
|
|
|
55
64
|
"""The call's arguments, narrowed to what the person may reach; raises PERMISSION otherwise."""
|
|
56
65
|
if not user_identifier:
|
|
57
66
|
return arguments
|
|
58
|
-
if not access.can(company_short_name, user_identifier, USE, "tool", function_name):
|
|
67
|
+
if not access.can(company_short_name, user_identifier, USE, "tool", tool_access_key(function_name)):
|
|
59
68
|
raise _denied(f"No access to the tool '{function_name}'.")
|
|
60
69
|
|
|
61
70
|
scoped = dict(arguments)
|