iatoolkit 2.24.1__tar.gz → 2.25.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.24.1/src/iatoolkit.egg-info → iatoolkit-2.25.1}/PKG-INFO +1 -1
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/__init__.py +1 -1
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_tools_pack.yaml +80 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/locales/en.yaml +44 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/locales/es.yaml +44 -0
- iatoolkit-2.25.1/src/iatoolkit/repositories/knowledge_wiki_repo.py +218 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/models.py +123 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/dispatcher_service.py +96 -1
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/inference_service.py +1 -1
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/llm_client_service.py +149 -15
- iatoolkit-2.25.1/src/iatoolkit/services/markdown_wiki_service.py +279 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/memory_wiki_service.py +16 -90
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/query_service.py +1 -1
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/storage_service.py +40 -0
- iatoolkit-2.25.1/src/iatoolkit/services/tenant_knowledge_wiki_service.py +661 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/tool_service.py +48 -1
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/tool_api_view.py +4 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1/src/iatoolkit.egg-info}/PKG-INFO +1 -1
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit.egg-info/SOURCES.txt +3 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/LICENSE +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/LICENSE_COMMUNITY.md +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/pyproject.toml +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/readme.md +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/requirements.txt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/setup.cfg +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/base_company.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/cli_commands.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/__init__.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/exceptions.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/interfaces/__init__.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/model_registry.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/routes.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/secret_resolver.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/session_manager.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/common/util.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/company_registry.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/__init__.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/core.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/__init__.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/call_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/connectors/__init__.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/google_auth_client.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/google_chat_app.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/inference_handler.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_proxy.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/llm_response.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/infra/redis_session_manager.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/__init__.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/api_key_repo.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/database_manager.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/document_repo.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/memory_repo.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/profile_repo.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/repositories/vs_repo.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/runtime_logging.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/__init__.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/api_key_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/attachment_policy_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/auth_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/benchmark_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/branding_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/company_context_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/configuration_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/context_builder_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/embedding_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/excel_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/file_processor_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/history_manager_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/http_tool_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/i18n_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/jwt_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/knowledge_base_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/language_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/license_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/mail_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/mcp_token_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/memory_compiler_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/memory_lint_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/memory_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/__init__.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/contracts.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/parsers/validator.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/pdf_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/profile_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/prompt_resource_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/prompt_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/sql_dataset_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/sql_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/sql_source_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/structured_output_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/system_tools.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/telemetry_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/tool_output_contract.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/user_feedback_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/user_session_context_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/visual_kb_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/visual_tool_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/warmup_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/web_search/__init__.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/services/web_search_service.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/images/fernando.jpeg +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_filepond.js +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_help_content.js +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_history_button.js +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_main.js +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/styles/chat_modal.css +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/styles/chat_public.css +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/styles/documents.css +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/styles/landing_page.css +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/styles/llm_output.css +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/static/styles/onboarding.css +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/_company_header.html +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/_login_widget.html +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/account.html +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/base.html +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/change_password.html +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/chat.html +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/chat_modals.html +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/error.html +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/forgot_password.html +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/home_hosted_default.html +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/onboarding_shell.html +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/pdf/base.html +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/pdf/letter.html +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/pdf/report.html +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/pdf/simple.html +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/templates/signup.html +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/__init__.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/account_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/api_key_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/base_login_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/categories_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/change_password_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/chat_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/configuration_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/connectors_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/embedding_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/forgot_password_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/help_content_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/history_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/home_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/init_context_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/llmquery_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/load_document_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/login_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/logout_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/memory_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/profile_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/prompt_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/rag_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/root_redirect_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/signup_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/static_page_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/users_api_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit/views/verify_user_view.py +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit.egg-info/requires.txt +0 -0
- {iatoolkit-2.24.1 → iatoolkit-2.25.1}/src/iatoolkit.egg-info/top_level.txt +0 -0
|
@@ -276,6 +276,86 @@ tools:
|
|
|
276
276
|
description: "Opcional en la práctica. Usa null cuando no necesites filtrar por metadata. No inventes filtros ni envíes [] por defecto. Ejemplo: [{'key':'doc.type','value':'invoice'},{'key':'chunk.source_type','value':'table'}]."
|
|
277
277
|
required:
|
|
278
278
|
- query
|
|
279
|
+
- function_name: iat_knowledge_wiki_search
|
|
280
|
+
description: Busca páginas publicadas dentro de las wikis de conocimiento compartidas por la empresa. Úsala para políticas, playbooks, procesos, runbooks, conocimiento operativo, onboarding, guías por área o información curada del tenant. No es memoria personal del usuario ni búsqueda documental cruda.
|
|
281
|
+
routing:
|
|
282
|
+
force_include_capability: has_knowledge_wikis
|
|
283
|
+
routing_profile:
|
|
284
|
+
tags:
|
|
285
|
+
- knowledge_wiki
|
|
286
|
+
- company_knowledge
|
|
287
|
+
- tenant_context
|
|
288
|
+
- playbook
|
|
289
|
+
- policy
|
|
290
|
+
- process
|
|
291
|
+
- runbook
|
|
292
|
+
- onboarding
|
|
293
|
+
- wiki
|
|
294
|
+
intents:
|
|
295
|
+
- Search curated company wiki pages for policies, processes, playbooks, runbooks, or area knowledge.
|
|
296
|
+
- Retrieve published tenant knowledge before answering operational questions.
|
|
297
|
+
- Find the relevant company wiki page when the user asks about internal procedures.
|
|
298
|
+
examples:
|
|
299
|
+
- iat_knowledge_wiki_search(query="politica de descuentos enterprise", wiki_key="sales", limit=5)
|
|
300
|
+
- iat_knowledge_wiki_search(query="como escalar incidentes sev1", wiki_key="ops", limit=3)
|
|
301
|
+
- iat_knowledge_wiki_search(query="onboarding de nuevos ejecutivos", limit=5)
|
|
302
|
+
cost:
|
|
303
|
+
penalty: 0.07
|
|
304
|
+
latency_class: low
|
|
305
|
+
expensive: false
|
|
306
|
+
parameters:
|
|
307
|
+
type: object
|
|
308
|
+
properties:
|
|
309
|
+
query:
|
|
310
|
+
type: string
|
|
311
|
+
description: Texto que describe el conocimiento publicado que deseas recuperar.
|
|
312
|
+
wiki_key:
|
|
313
|
+
anyOf:
|
|
314
|
+
- type: string
|
|
315
|
+
- type: "null"
|
|
316
|
+
description: Clave opcional de la wiki a consultar. Usa null para buscar en todas las wikis publicadas.
|
|
317
|
+
limit:
|
|
318
|
+
type: integer
|
|
319
|
+
description: Cantidad máxima de páginas a recuperar.
|
|
320
|
+
minimum: 1
|
|
321
|
+
maximum: 25
|
|
322
|
+
required:
|
|
323
|
+
- query
|
|
324
|
+
- limit
|
|
325
|
+
- function_name: iat_knowledge_wiki_get_page
|
|
326
|
+
description: Recupera una página completa de una wiki de conocimiento compartida por la empresa usando wiki_key y path/slug. Úsala después de iat_knowledge_wiki_search cuando necesites leer el contenido completo antes de responder.
|
|
327
|
+
routing:
|
|
328
|
+
force_include_capability: has_knowledge_wikis
|
|
329
|
+
routing_profile:
|
|
330
|
+
tags:
|
|
331
|
+
- knowledge_wiki
|
|
332
|
+
- company_knowledge
|
|
333
|
+
- tenant_context
|
|
334
|
+
- page
|
|
335
|
+
- markdown
|
|
336
|
+
- wiki
|
|
337
|
+
intents:
|
|
338
|
+
- Open a published tenant wiki page by path or slug.
|
|
339
|
+
- Read the full markdown content of a company knowledge page before answering.
|
|
340
|
+
examples:
|
|
341
|
+
- iat_knowledge_wiki_get_page(wiki_key="sales", path="pricing.md")
|
|
342
|
+
- iat_knowledge_wiki_get_page(wiki_key="ops", path="incident-response.md")
|
|
343
|
+
cost:
|
|
344
|
+
penalty: 0.04
|
|
345
|
+
latency_class: low
|
|
346
|
+
expensive: false
|
|
347
|
+
parameters:
|
|
348
|
+
type: object
|
|
349
|
+
properties:
|
|
350
|
+
wiki_key:
|
|
351
|
+
type: string
|
|
352
|
+
description: Clave de la wiki publicada.
|
|
353
|
+
path:
|
|
354
|
+
type: string
|
|
355
|
+
description: Path o slug de la página a recuperar.
|
|
356
|
+
required:
|
|
357
|
+
- wiki_key
|
|
358
|
+
- path
|
|
279
359
|
- function_name: iat_memory_search
|
|
280
360
|
description: Busca páginas relevantes dentro de la Memoria personal del usuario y retorna contexto compilado. Incluye la señal `has_native_files` cuando una memoria tiene archivos fuente que pueden adjuntarse nativamente al modelo. Debe usarse antes de responder preguntas sobre cosas guardadas, notas previas, memoria del usuario, continuidad entre sesiones o "lo que hablamos/guardé antes".
|
|
281
361
|
routing:
|
|
@@ -621,6 +621,46 @@ ui:
|
|
|
621
621
|
description: "Description"
|
|
622
622
|
skills: "Skills"
|
|
623
623
|
|
|
624
|
+
knowledge_wikis:
|
|
625
|
+
menu_label: "Wikis"
|
|
626
|
+
title: "Knowledge wikis"
|
|
627
|
+
wikis: "Wikis"
|
|
628
|
+
new_wiki: "New wiki"
|
|
629
|
+
configure: "Configuration"
|
|
630
|
+
key: "Key"
|
|
631
|
+
name: "Name"
|
|
632
|
+
root: "Storage root"
|
|
633
|
+
status: "Status"
|
|
634
|
+
status_published: "Published"
|
|
635
|
+
status_draft: "Draft"
|
|
636
|
+
status_archived: "Archived"
|
|
637
|
+
description: "Description"
|
|
638
|
+
pages: "Pages"
|
|
639
|
+
index: "Index"
|
|
640
|
+
mcp: "MCP"
|
|
641
|
+
lint: "Review"
|
|
642
|
+
sync: "Sync"
|
|
643
|
+
issues: "issues"
|
|
644
|
+
index_resource: "Index resource"
|
|
645
|
+
copy_uri: "Copy URI"
|
|
646
|
+
publish_mcp: "Publish to MCP"
|
|
647
|
+
open_mcp: "Open MCP"
|
|
648
|
+
filter_pages: "Filter pages"
|
|
649
|
+
loading: "Loading..."
|
|
650
|
+
empty: "No wikis configured."
|
|
651
|
+
no_pages: "No pages."
|
|
652
|
+
no_issues: "No issues."
|
|
653
|
+
missing_key: "Wiki key is required."
|
|
654
|
+
save_ok: "Wiki saved."
|
|
655
|
+
save_error: "Could not save wiki."
|
|
656
|
+
sync_ok: "Sync queued."
|
|
657
|
+
sync_error: "Could not sync wiki."
|
|
658
|
+
lint_ok: "Review completed."
|
|
659
|
+
lint_error: "Could not review wiki."
|
|
660
|
+
mcp_ok: "Wiki published to MCP."
|
|
661
|
+
mcp_error: "Could not publish to MCP."
|
|
662
|
+
copy_ok: "URI copied."
|
|
663
|
+
|
|
624
664
|
skills:
|
|
625
665
|
title: "Skills"
|
|
626
666
|
search_placeholder: "Search skills"
|
|
@@ -1859,6 +1899,10 @@ ui:
|
|
|
1859
1899
|
company_config_desc: "Core runtime, branding, connector, and company behavior configuration."
|
|
1860
1900
|
company_card_title: "Company"
|
|
1861
1901
|
company_card_desc: "Core identity and runtime information for this company."
|
|
1902
|
+
company_editor_desc: "Review and update the full company configuration for identity, runtime, and branding."
|
|
1903
|
+
policies_card_title: "Policies"
|
|
1904
|
+
policies_card_desc: "Manage runtime access policies, quotas, and tool or model controls."
|
|
1905
|
+
policies_editor_desc: "Review and update the runtime policy file used for access decisions."
|
|
1862
1906
|
company_name: "Company name"
|
|
1863
1907
|
short_name: "Short name"
|
|
1864
1908
|
runtime_mode: "Runtime mode"
|
|
@@ -621,6 +621,46 @@ ui:
|
|
|
621
621
|
description: "Descripción"
|
|
622
622
|
skills: "Skills"
|
|
623
623
|
|
|
624
|
+
knowledge_wikis:
|
|
625
|
+
menu_label: "Wikis"
|
|
626
|
+
title: "Wikis de conocimiento"
|
|
627
|
+
wikis: "Wikis"
|
|
628
|
+
new_wiki: "Nueva wiki"
|
|
629
|
+
configure: "Configuración"
|
|
630
|
+
key: "Clave"
|
|
631
|
+
name: "Nombre"
|
|
632
|
+
root: "Raíz storage"
|
|
633
|
+
status: "Estado"
|
|
634
|
+
status_published: "Publicada"
|
|
635
|
+
status_draft: "Borrador"
|
|
636
|
+
status_archived: "Archivada"
|
|
637
|
+
description: "Descripción"
|
|
638
|
+
pages: "Páginas"
|
|
639
|
+
index: "Índice"
|
|
640
|
+
mcp: "MCP"
|
|
641
|
+
lint: "Revisar"
|
|
642
|
+
sync: "Sincronizar"
|
|
643
|
+
issues: "hallazgos"
|
|
644
|
+
index_resource: "Resource de índice"
|
|
645
|
+
copy_uri: "Copiar URI"
|
|
646
|
+
publish_mcp: "Publicar en MCP"
|
|
647
|
+
open_mcp: "Abrir MCP"
|
|
648
|
+
filter_pages: "Filtrar páginas"
|
|
649
|
+
loading: "Cargando..."
|
|
650
|
+
empty: "No hay wikis configuradas."
|
|
651
|
+
no_pages: "No hay páginas."
|
|
652
|
+
no_issues: "Sin issues."
|
|
653
|
+
missing_key: "Debes ingresar una key de wiki."
|
|
654
|
+
save_ok: "Wiki guardada."
|
|
655
|
+
save_error: "No se pudo guardar la wiki."
|
|
656
|
+
sync_ok: "Sincronización encolada."
|
|
657
|
+
sync_error: "No se pudo sincronizar la wiki."
|
|
658
|
+
lint_ok: "Revisión completada."
|
|
659
|
+
lint_error: "No se pudo revisar la wiki."
|
|
660
|
+
mcp_ok: "Wiki publicada en MCP."
|
|
661
|
+
mcp_error: "No se pudo publicar en MCP."
|
|
662
|
+
copy_ok: "URI copiada."
|
|
663
|
+
|
|
624
664
|
skills:
|
|
625
665
|
title: "Skills"
|
|
626
666
|
search_placeholder: "Buscar skills"
|
|
@@ -1863,6 +1903,10 @@ ui:
|
|
|
1863
1903
|
company_config_desc: "Configuración central de runtime, branding, conectores y comportamiento de la empresa."
|
|
1864
1904
|
company_card_title: "Empresa"
|
|
1865
1905
|
company_card_desc: "Identidad principal e información de runtime para esta empresa."
|
|
1906
|
+
company_editor_desc: "Revisa y actualiza la configuración completa de empresa para identidad, runtime y branding."
|
|
1907
|
+
policies_card_title: "Políticas"
|
|
1908
|
+
policies_card_desc: "Administra políticas de acceso, cuotas y controles de tools o modelos en runtime."
|
|
1909
|
+
policies_editor_desc: "Revisa y actualiza el archivo de políticas usado para decisiones de acceso en runtime."
|
|
1866
1910
|
company_name: "Nombre de la empresa"
|
|
1867
1911
|
short_name: "Nombre corto"
|
|
1868
1912
|
runtime_mode: "Modo runtime"
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# Copyright (c) 2024 Fernando Libedinsky
|
|
2
|
+
# Product: IAToolkit
|
|
3
|
+
#
|
|
4
|
+
# IAToolkit is open source software.
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
from datetime import datetime
|
|
9
|
+
|
|
10
|
+
from injector import inject
|
|
11
|
+
|
|
12
|
+
from iatoolkit.repositories.database_manager import DatabaseManager
|
|
13
|
+
from iatoolkit.repositories.models import (
|
|
14
|
+
KnowledgeWiki,
|
|
15
|
+
KnowledgeWikiPage,
|
|
16
|
+
KnowledgeWikiPageStatus,
|
|
17
|
+
KnowledgeWikiStatus,
|
|
18
|
+
KnowledgeWikiSyncRun,
|
|
19
|
+
KnowledgeWikiSyncStatus,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class KnowledgeWikiRepo:
|
|
24
|
+
@inject
|
|
25
|
+
def __init__(self, db_manager: DatabaseManager):
|
|
26
|
+
self.session = db_manager.get_session()
|
|
27
|
+
|
|
28
|
+
def commit(self):
|
|
29
|
+
self.session.commit()
|
|
30
|
+
|
|
31
|
+
def rollback(self):
|
|
32
|
+
self.session.rollback()
|
|
33
|
+
|
|
34
|
+
def get_wiki_by_key(self, company_id: int, wiki_key: str) -> KnowledgeWiki | None:
|
|
35
|
+
if not company_id or not wiki_key:
|
|
36
|
+
return None
|
|
37
|
+
return (
|
|
38
|
+
self.session.query(KnowledgeWiki)
|
|
39
|
+
.filter_by(company_id=company_id, wiki_key=wiki_key)
|
|
40
|
+
.first()
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
def get_wiki(self, company_id: int, wiki_id: int) -> KnowledgeWiki | None:
|
|
44
|
+
if not company_id or not wiki_id:
|
|
45
|
+
return None
|
|
46
|
+
return (
|
|
47
|
+
self.session.query(KnowledgeWiki)
|
|
48
|
+
.filter_by(company_id=company_id, id=wiki_id)
|
|
49
|
+
.first()
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
def list_wikis(self, company_id: int, *, include_archived: bool = False) -> list[KnowledgeWiki]:
|
|
53
|
+
if not company_id:
|
|
54
|
+
return []
|
|
55
|
+
query = self.session.query(KnowledgeWiki).filter_by(company_id=company_id)
|
|
56
|
+
if not include_archived:
|
|
57
|
+
query = query.filter(KnowledgeWiki.status != KnowledgeWikiStatus.ARCHIVED)
|
|
58
|
+
return query.order_by(KnowledgeWiki.name.asc(), KnowledgeWiki.id.asc()).all()
|
|
59
|
+
|
|
60
|
+
def create_or_update_wiki(
|
|
61
|
+
self,
|
|
62
|
+
*,
|
|
63
|
+
company_id: int,
|
|
64
|
+
wiki_key: str,
|
|
65
|
+
name: str,
|
|
66
|
+
root_storage_key: str,
|
|
67
|
+
description: str | None = None,
|
|
68
|
+
status: KnowledgeWikiStatus = KnowledgeWikiStatus.PUBLISHED,
|
|
69
|
+
settings: dict | None = None,
|
|
70
|
+
) -> KnowledgeWiki:
|
|
71
|
+
wiki = self.get_wiki_by_key(company_id, wiki_key)
|
|
72
|
+
if wiki:
|
|
73
|
+
wiki.name = name
|
|
74
|
+
wiki.description = description
|
|
75
|
+
wiki.root_storage_key = root_storage_key
|
|
76
|
+
wiki.status = status
|
|
77
|
+
wiki.settings = settings or {}
|
|
78
|
+
else:
|
|
79
|
+
wiki = KnowledgeWiki(
|
|
80
|
+
company_id=company_id,
|
|
81
|
+
wiki_key=wiki_key,
|
|
82
|
+
name=name,
|
|
83
|
+
description=description,
|
|
84
|
+
root_storage_key=root_storage_key,
|
|
85
|
+
status=status,
|
|
86
|
+
settings=settings or {},
|
|
87
|
+
)
|
|
88
|
+
self.session.add(wiki)
|
|
89
|
+
self.session.commit()
|
|
90
|
+
return wiki
|
|
91
|
+
|
|
92
|
+
def get_page_by_path(self, wiki_id: int, path: str) -> KnowledgeWikiPage | None:
|
|
93
|
+
if not wiki_id or not path:
|
|
94
|
+
return None
|
|
95
|
+
return (
|
|
96
|
+
self.session.query(KnowledgeWikiPage)
|
|
97
|
+
.filter_by(wiki_id=wiki_id, path=path)
|
|
98
|
+
.first()
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
def get_page_by_slug(self, wiki_id: int, slug: str) -> KnowledgeWikiPage | None:
|
|
102
|
+
if not wiki_id or not slug:
|
|
103
|
+
return None
|
|
104
|
+
return (
|
|
105
|
+
self.session.query(KnowledgeWikiPage)
|
|
106
|
+
.filter_by(wiki_id=wiki_id, slug=slug)
|
|
107
|
+
.first()
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
def list_pages(
|
|
111
|
+
self,
|
|
112
|
+
wiki_id: int,
|
|
113
|
+
*,
|
|
114
|
+
include_archived: bool = False,
|
|
115
|
+
limit: int = 500,
|
|
116
|
+
) -> list[KnowledgeWikiPage]:
|
|
117
|
+
if not wiki_id:
|
|
118
|
+
return []
|
|
119
|
+
query = self.session.query(KnowledgeWikiPage).filter_by(wiki_id=wiki_id)
|
|
120
|
+
if not include_archived:
|
|
121
|
+
query = query.filter(KnowledgeWikiPage.status != KnowledgeWikiPageStatus.ARCHIVED)
|
|
122
|
+
return (
|
|
123
|
+
query
|
|
124
|
+
.order_by(KnowledgeWikiPage.path.asc(), KnowledgeWikiPage.id.asc())
|
|
125
|
+
.limit(limit)
|
|
126
|
+
.all()
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
def create_or_update_page(
|
|
130
|
+
self,
|
|
131
|
+
*,
|
|
132
|
+
company_id: int,
|
|
133
|
+
wiki_id: int,
|
|
134
|
+
path: str,
|
|
135
|
+
slug: str,
|
|
136
|
+
title: str,
|
|
137
|
+
source_storage_key: str,
|
|
138
|
+
summary: str | None = None,
|
|
139
|
+
body_text: str | None = None,
|
|
140
|
+
status: KnowledgeWikiPageStatus = KnowledgeWikiPageStatus.PUBLISHED,
|
|
141
|
+
tags: list[str] | None = None,
|
|
142
|
+
owner: str | None = None,
|
|
143
|
+
source_meta: dict | None = None,
|
|
144
|
+
last_synced_at: datetime | None = None,
|
|
145
|
+
) -> KnowledgeWikiPage:
|
|
146
|
+
page = self.get_page_by_path(wiki_id, path)
|
|
147
|
+
if page is None:
|
|
148
|
+
page = self.get_page_by_slug(wiki_id, slug)
|
|
149
|
+
|
|
150
|
+
if page:
|
|
151
|
+
page.path = path
|
|
152
|
+
page.slug = slug
|
|
153
|
+
page.title = title
|
|
154
|
+
page.summary = summary
|
|
155
|
+
page.body_text = body_text
|
|
156
|
+
page.source_storage_key = source_storage_key
|
|
157
|
+
page.status = status
|
|
158
|
+
page.tags = tags or []
|
|
159
|
+
page.owner = owner
|
|
160
|
+
page.source_meta = source_meta or {}
|
|
161
|
+
page.last_synced_at = last_synced_at
|
|
162
|
+
else:
|
|
163
|
+
page = KnowledgeWikiPage(
|
|
164
|
+
company_id=company_id,
|
|
165
|
+
wiki_id=wiki_id,
|
|
166
|
+
path=path,
|
|
167
|
+
slug=slug,
|
|
168
|
+
title=title,
|
|
169
|
+
summary=summary,
|
|
170
|
+
body_text=body_text,
|
|
171
|
+
source_storage_key=source_storage_key,
|
|
172
|
+
status=status,
|
|
173
|
+
tags=tags or [],
|
|
174
|
+
owner=owner,
|
|
175
|
+
source_meta=source_meta or {},
|
|
176
|
+
last_synced_at=last_synced_at,
|
|
177
|
+
)
|
|
178
|
+
self.session.add(page)
|
|
179
|
+
self.session.commit()
|
|
180
|
+
return page
|
|
181
|
+
|
|
182
|
+
def archive_pages_not_in_paths(self, wiki_id: int, paths: set[str]) -> int:
|
|
183
|
+
if not wiki_id:
|
|
184
|
+
return 0
|
|
185
|
+
query = self.session.query(KnowledgeWikiPage).filter_by(wiki_id=wiki_id)
|
|
186
|
+
if paths:
|
|
187
|
+
query = query.filter(~KnowledgeWikiPage.path.in_(paths))
|
|
188
|
+
rows = query.all()
|
|
189
|
+
changed = 0
|
|
190
|
+
for page in rows:
|
|
191
|
+
if page.status != KnowledgeWikiPageStatus.ARCHIVED:
|
|
192
|
+
page.status = KnowledgeWikiPageStatus.ARCHIVED
|
|
193
|
+
changed += 1
|
|
194
|
+
if changed:
|
|
195
|
+
self.session.commit()
|
|
196
|
+
return changed
|
|
197
|
+
|
|
198
|
+
def create_sync_run(
|
|
199
|
+
self,
|
|
200
|
+
*,
|
|
201
|
+
company_id: int,
|
|
202
|
+
wiki_id: int,
|
|
203
|
+
metadata_json: dict | None = None,
|
|
204
|
+
) -> KnowledgeWikiSyncRun:
|
|
205
|
+
run = KnowledgeWikiSyncRun(
|
|
206
|
+
company_id=company_id,
|
|
207
|
+
wiki_id=wiki_id,
|
|
208
|
+
status=KnowledgeWikiSyncStatus.RUNNING,
|
|
209
|
+
metadata_json=metadata_json or {},
|
|
210
|
+
)
|
|
211
|
+
self.session.add(run)
|
|
212
|
+
self.session.commit()
|
|
213
|
+
return run
|
|
214
|
+
|
|
215
|
+
def save_sync_run(self, run: KnowledgeWikiSyncRun) -> KnowledgeWikiSyncRun:
|
|
216
|
+
self.session.add(run)
|
|
217
|
+
self.session.commit()
|
|
218
|
+
return run
|
|
@@ -69,6 +69,25 @@ class MemoryCaptureStatus(str, enum.Enum):
|
|
|
69
69
|
FAILED = "failed"
|
|
70
70
|
|
|
71
71
|
|
|
72
|
+
class KnowledgeWikiStatus(str, enum.Enum):
|
|
73
|
+
DRAFT = "draft"
|
|
74
|
+
PUBLISHED = "published"
|
|
75
|
+
ARCHIVED = "archived"
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class KnowledgeWikiPageStatus(str, enum.Enum):
|
|
79
|
+
DRAFT = "draft"
|
|
80
|
+
PUBLISHED = "published"
|
|
81
|
+
ARCHIVED = "archived"
|
|
82
|
+
BROKEN = "broken"
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
class KnowledgeWikiSyncStatus(str, enum.Enum):
|
|
86
|
+
RUNNING = "running"
|
|
87
|
+
SUCCESS = "success"
|
|
88
|
+
FAILED = "failed"
|
|
89
|
+
|
|
90
|
+
|
|
72
91
|
# Cross-database JSON type:
|
|
73
92
|
# - PostgreSQL: JSONB (for jsonb operators/functions/indexing)
|
|
74
93
|
# - SQLite/others (tests): JSON
|
|
@@ -180,6 +199,16 @@ class Company(Base):
|
|
|
180
199
|
back_populates="company",
|
|
181
200
|
cascade="all, delete-orphan",
|
|
182
201
|
)
|
|
202
|
+
knowledge_wikis = relationship(
|
|
203
|
+
"KnowledgeWiki",
|
|
204
|
+
back_populates="company",
|
|
205
|
+
cascade="all, delete-orphan",
|
|
206
|
+
)
|
|
207
|
+
knowledge_wiki_pages = relationship(
|
|
208
|
+
"KnowledgeWikiPage",
|
|
209
|
+
back_populates="company",
|
|
210
|
+
cascade="all, delete-orphan",
|
|
211
|
+
)
|
|
183
212
|
|
|
184
213
|
|
|
185
214
|
def to_dict(self):
|
|
@@ -519,6 +548,100 @@ class VSImage(Base):
|
|
|
519
548
|
return {column.key: getattr(self, column.key) for column in class_mapper(self.__class__).columns}
|
|
520
549
|
|
|
521
550
|
|
|
551
|
+
class KnowledgeWiki(Base):
|
|
552
|
+
"""Represents a published markdown knowledge wiki scoped to a tenant."""
|
|
553
|
+
__tablename__ = "iat_knowledge_wikis"
|
|
554
|
+
|
|
555
|
+
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
556
|
+
company_id = Column(Integer, ForeignKey(f"{ORM_SCHEMA}.iat_companies.id", ondelete="CASCADE"), nullable=False)
|
|
557
|
+
wiki_key = Column(String, nullable=False)
|
|
558
|
+
name = Column(String, nullable=False)
|
|
559
|
+
description = Column(Text, nullable=True)
|
|
560
|
+
root_storage_key = Column(String, nullable=False)
|
|
561
|
+
status = Column(Enum(KnowledgeWikiStatus), nullable=False, default=KnowledgeWikiStatus.PUBLISHED)
|
|
562
|
+
settings = Column(JSON_NATIVE, nullable=False, default=dict)
|
|
563
|
+
last_synced_at = Column(DateTime, nullable=True)
|
|
564
|
+
created_at = Column(DateTime, default=datetime.now, nullable=False)
|
|
565
|
+
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, nullable=False)
|
|
566
|
+
|
|
567
|
+
__table_args__ = (
|
|
568
|
+
UniqueConstraint("company_id", "wiki_key", name="uix_knowledge_wiki_company_key"),
|
|
569
|
+
)
|
|
570
|
+
|
|
571
|
+
company = relationship("Company", back_populates="knowledge_wikis")
|
|
572
|
+
pages = relationship(
|
|
573
|
+
"KnowledgeWikiPage",
|
|
574
|
+
back_populates="wiki",
|
|
575
|
+
cascade="all, delete-orphan",
|
|
576
|
+
)
|
|
577
|
+
sync_runs = relationship(
|
|
578
|
+
"KnowledgeWikiSyncRun",
|
|
579
|
+
back_populates="wiki",
|
|
580
|
+
cascade="all, delete-orphan",
|
|
581
|
+
)
|
|
582
|
+
|
|
583
|
+
def to_dict(self):
|
|
584
|
+
return {column.key: getattr(self, column.key) for column in class_mapper(self.__class__).columns}
|
|
585
|
+
|
|
586
|
+
|
|
587
|
+
class KnowledgeWikiPage(Base):
|
|
588
|
+
"""Represents one published markdown page inside a tenant knowledge wiki."""
|
|
589
|
+
__tablename__ = "iat_knowledge_wiki_pages"
|
|
590
|
+
|
|
591
|
+
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
592
|
+
company_id = Column(Integer, ForeignKey(f"{ORM_SCHEMA}.iat_companies.id", ondelete="CASCADE"), nullable=False)
|
|
593
|
+
wiki_id = Column(Integer, ForeignKey(f"{ORM_SCHEMA}.iat_knowledge_wikis.id", ondelete="CASCADE"), nullable=False)
|
|
594
|
+
path = Column(String, nullable=False)
|
|
595
|
+
slug = Column(String, nullable=False)
|
|
596
|
+
title = Column(String, nullable=False)
|
|
597
|
+
summary = Column(Text, nullable=True)
|
|
598
|
+
body_text = Column(Text, nullable=True)
|
|
599
|
+
source_storage_key = Column(String, nullable=False)
|
|
600
|
+
status = Column(Enum(KnowledgeWikiPageStatus), nullable=False, default=KnowledgeWikiPageStatus.PUBLISHED)
|
|
601
|
+
tags = Column(JSON_NATIVE, nullable=False, default=list)
|
|
602
|
+
owner = Column(String, nullable=True)
|
|
603
|
+
source_meta = Column(JSON_NATIVE, nullable=False, default=dict)
|
|
604
|
+
last_synced_at = Column(DateTime, nullable=True)
|
|
605
|
+
created_at = Column(DateTime, default=datetime.now, nullable=False)
|
|
606
|
+
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, nullable=False)
|
|
607
|
+
|
|
608
|
+
__table_args__ = (
|
|
609
|
+
UniqueConstraint("wiki_id", "path", name="uix_knowledge_wiki_page_path"),
|
|
610
|
+
UniqueConstraint("wiki_id", "slug", name="uix_knowledge_wiki_page_slug"),
|
|
611
|
+
)
|
|
612
|
+
|
|
613
|
+
company = relationship("Company", back_populates="knowledge_wiki_pages")
|
|
614
|
+
wiki = relationship("KnowledgeWiki", back_populates="pages")
|
|
615
|
+
|
|
616
|
+
def to_dict(self):
|
|
617
|
+
return {column.key: getattr(self, column.key) for column in class_mapper(self.__class__).columns}
|
|
618
|
+
|
|
619
|
+
|
|
620
|
+
class KnowledgeWikiSyncRun(Base):
|
|
621
|
+
"""Tracks one import/reindex pass for a tenant knowledge wiki."""
|
|
622
|
+
__tablename__ = "iat_knowledge_wiki_sync_runs"
|
|
623
|
+
|
|
624
|
+
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
625
|
+
company_id = Column(Integer, ForeignKey(f"{ORM_SCHEMA}.iat_companies.id", ondelete="CASCADE"), nullable=False)
|
|
626
|
+
wiki_id = Column(Integer, ForeignKey(f"{ORM_SCHEMA}.iat_knowledge_wikis.id", ondelete="CASCADE"), nullable=False)
|
|
627
|
+
status = Column(Enum(KnowledgeWikiSyncStatus), nullable=False, default=KnowledgeWikiSyncStatus.RUNNING)
|
|
628
|
+
pages_seen = Column(Integer, nullable=False, default=0)
|
|
629
|
+
pages_indexed = Column(Integer, nullable=False, default=0)
|
|
630
|
+
pages_failed = Column(Integer, nullable=False, default=0)
|
|
631
|
+
errors = Column(JSON_NATIVE, nullable=False, default=list)
|
|
632
|
+
metadata_json = Column(JSON_NATIVE, nullable=False, default=dict)
|
|
633
|
+
started_at = Column(DateTime, default=datetime.now, nullable=False)
|
|
634
|
+
finished_at = Column(DateTime, nullable=True)
|
|
635
|
+
created_at = Column(DateTime, default=datetime.now, nullable=False)
|
|
636
|
+
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now, nullable=False)
|
|
637
|
+
|
|
638
|
+
company = relationship("Company")
|
|
639
|
+
wiki = relationship("KnowledgeWiki", back_populates="sync_runs")
|
|
640
|
+
|
|
641
|
+
def to_dict(self):
|
|
642
|
+
return {column.key: getattr(self, column.key) for column in class_mapper(self.__class__).columns}
|
|
643
|
+
|
|
644
|
+
|
|
522
645
|
class UserFeedback(Base):
|
|
523
646
|
"""Stores feedback and ratings submitted by users for specific interactions."""
|
|
524
647
|
__tablename__ = 'iat_feedback'
|