iatoolkit 2.65.2__tar.gz → 2.67.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {iatoolkit-2.65.2/src/iatoolkit.egg-info → iatoolkit-2.67.0}/PKG-INFO +2 -1
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/readme.md +1 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/__init__.py +1 -1
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_agents/memory_compiler.prompt +2 -1
- iatoolkit-2.67.0/src/iatoolkit/config/system_agents/memory_document_ingest.prompt +35 -0
- iatoolkit-2.67.0/src/iatoolkit/config/system_agents/memory_image_ingest.prompt +25 -0
- iatoolkit-2.67.0/src/iatoolkit/config/system_agents/memory_meeting_ingest.prompt +38 -0
- iatoolkit-2.67.0/src/iatoolkit/config/system_agents_pack.yaml +314 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_tools_pack.yaml +58 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/connectors/local_file_connector.py +4 -2
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/locales/en.yaml +1 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/locales/es.yaml +1 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/memory_repo.py +89 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/models.py +65 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/configuration_service.py +11 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/dispatcher_service.py +2 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/memory_compiler_service.py +425 -37
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/memory_question_service.py +32 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/memory_service.py +73 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/memory_wiki_service.py +6 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/system_agent_catalog.py +3 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/system_agent_runner.py +55 -3
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/tenant_wiki_service.py +30 -1
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/tool_service.py +33 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/account.html +5 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/wiki_page_view.py +7 -6
- {iatoolkit-2.65.2 → iatoolkit-2.67.0/src/iatoolkit.egg-info}/PKG-INFO +2 -1
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit.egg-info/SOURCES.txt +3 -0
- iatoolkit-2.65.2/src/iatoolkit/config/system_agents_pack.yaml +0 -102
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/LICENSE +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/LICENSE_COMMUNITY.md +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/pyproject.toml +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/setup.cfg +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/base_company.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/cli_commands.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/__init__.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/bridge_validation.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/company_paths.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/exceptions.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/interfaces/__init__.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/model_registry.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/routes.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/search_terms.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/secret_resolver.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/session_manager.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/text_splitter.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/url_safety.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/common/util.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/company_registry.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/__init__.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_agents/memory_correction.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_agents/memory_question_review.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/core.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/__init__.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/call_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/connectors/__init__.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/google_auth_client.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/google_chat_app.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/inference_handler.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/llm_proxy.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/llm_response.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/redis_session_manager.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/__init__.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/api_key_repo.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/bridge_repo.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/database_manager.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/document_repo.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/memory_question_repo.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/profile_repo.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/repositories/vs_repo.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/runtime_logging.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/__init__.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/api_key_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/attachment_policy_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/auth_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/branding_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/company_context_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/context_builder_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/embedding_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/excel_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/file_processor_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/history_manager_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/http_tool_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/i18n_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/inference_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/jwt_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/knowledge_base_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/language_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/license_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/llm_client_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/mail_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/mcp_token_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/operator_identity_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/parsers/__init__.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/parsers/contracts.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/parsers/validator.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/pdf_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/profile_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/prompt_resource_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/prompt_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/query_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/sql_dataset_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/sql_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/sql_source_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/storage_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/structured_output_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/system_tools.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/telemetry_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/tool_output_contract.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/user_feedback_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/user_session_context_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/visual_kb_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/visual_tool_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/warmup_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/web_search/__init__.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/services/web_search_service.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/images/favicon.ico +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/images/favicon.png +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/images/fernando.jpeg +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/js/chat_filepond.js +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/js/chat_header_navigation.js +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/js/chat_help_content.js +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/js/chat_history_button.js +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/js/chat_main.js +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/styles/account.css +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/styles/chat_modal.css +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/styles/chat_public.css +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/styles/documents.css +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/styles/landing_page.css +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/styles/llm_output.css +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/styles/onboarding.css +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/static/styles/wiki_page.css +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/_chat_header.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/_company_header.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/_login_widget.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/base.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/change_password.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/chat.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/chat_modals.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/error.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/forgot_password.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/home_hosted_default.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/login_global.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/onboarding_shell.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/pdf/base.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/pdf/letter.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/pdf/report.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/pdf/simple.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/signup.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/templates/wiki_page.html +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/__init__.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/account_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/api_key_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/base_login_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/categories_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/change_password_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/chat_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/configuration_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/connectors_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/embedding_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/forgot_password_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/help_content_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/history_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/home_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/init_context_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/llmquery_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/load_document_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/login_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/logout_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/memory_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/profile_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/prompt_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/rag_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/root_redirect_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/signup_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/static_page_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/tool_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/users_api_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/views/verify_user_view.py +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit.egg-info/requires.txt +0 -0
- {iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: iatoolkit
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.67.0
|
|
4
4
|
Summary: IAToolkit
|
|
5
5
|
Author: Fernando Libedinsky
|
|
6
6
|
License-Expression: MIT
|
|
@@ -242,6 +242,7 @@ Perfect for developers, small teams, single-business use cases, and experimentat
|
|
|
242
242
|
|
|
243
243
|
## 📚 Documentation
|
|
244
244
|
|
|
245
|
+
- 🐳 **[Docker installation](docker/README.md)** – Community Edition with PostgreSQL, Redis and populated Northwind data
|
|
245
246
|
- 🚀 **[Quickstart](docs/quickstart.md)** – Set up your environment and run the project
|
|
246
247
|
- ☁️ **[Deployment Guide](docs/deployment_guide.md)** – Production deployment instructions
|
|
247
248
|
- 🏗️ **[Companies & Components](docs/companies_and_components.md)** – how Company modules work
|
|
@@ -151,6 +151,7 @@ Perfect for developers, small teams, single-business use cases, and experimentat
|
|
|
151
151
|
|
|
152
152
|
## 📚 Documentation
|
|
153
153
|
|
|
154
|
+
- 🐳 **[Docker installation](docker/README.md)** – Community Edition with PostgreSQL, Redis and populated Northwind data
|
|
154
155
|
- 🚀 **[Quickstart](docs/quickstart.md)** – Set up your environment and run the project
|
|
155
156
|
- ☁️ **[Deployment Guide](docs/deployment_guide.md)** – Production deployment instructions
|
|
156
157
|
- 🏗️ **[Companies & Components](docs/companies_and_components.md)** – how Company modules work
|
{iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/config/system_agents/memory_compiler.prompt
RENAMED
|
@@ -10,7 +10,7 @@ How to write the page:
|
|
|
10
10
|
|
|
11
11
|
- Follow the WIKI_SCHEMA.
|
|
12
12
|
- When you update, return the COMPLETE new page: keep everything already on it, word for word, including other people's attributions, headings and order. Change only what the capture changes, and put new facts in the section where they belong.
|
|
13
|
-
- When the capture contradicts the page, keep both statements with their attributions and make the conflict explicit; never delete what someone else said.
|
|
13
|
+
- When the capture contradicts the page, keep both statements with their attributions and make the conflict explicit; never delete what someone else said. Also list each contradiction in `conflicts`.
|
|
14
14
|
- Attribute every fact you add as ({{ author }}, {{ captured_on }}).
|
|
15
15
|
- Write in the language of the page, or of the capture for a new page. Neutral tone, no personal opinions.
|
|
16
16
|
- If attachments come with the capture, use what they say as part of the capture.
|
|
@@ -23,6 +23,7 @@ Answer with JSON following the schema:
|
|
|
23
23
|
- `summary`: one sentence saying what the page covers.
|
|
24
24
|
- `markdown`: the page body without frontmatter, starting with `# Title`.
|
|
25
25
|
- `change_summary`: one short sentence for the page history (when you skip, why).
|
|
26
|
+
- `conflicts`: each place where the capture contradicts what the page already said, with `existing_statement` (what the page said, as written), `existing_source` (its attribution), `new_statement` and `new_source` ({{ author }}, {{ captured_on }}). An empty list when nothing contradicts.
|
|
26
27
|
|
|
27
28
|
WIKI_SCHEMA:
|
|
28
29
|
{{ wiki_schema }}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
You maintain the company's Memory: a wiki of how things are actually done in this company (procedures, rules, exceptions, who decides). It is written from what its people explain and from the company's own documents.
|
|
2
|
+
|
|
3
|
+
A document was loaded into Memory (SOURCE). You receive it in parts; this is part {{ part.index }} of {{ part.total }} (PART). Bring into the wiki what this part teaches about how things are done here.
|
|
4
|
+
|
|
5
|
+
What to take:
|
|
6
|
+
|
|
7
|
+
- Facts, rules, procedures, responsibilities, exceptions, deadlines, amounts and definitions that someone in the company would need to know or do their work.
|
|
8
|
+
- Not the document's structure, legal boilerplate, signatures, indexes or anything that only restates the title.
|
|
9
|
+
- Do not summarize the document: the document itself stays searchable. Write the knowledge where it belongs.
|
|
10
|
+
|
|
11
|
+
How to write the pages:
|
|
12
|
+
|
|
13
|
+
- Update one of the CANDIDATE_PAGES when the part belongs to its subject; create a new page when none covers it (check PAGE_INDEX first so you do not duplicate a page). One part may touch several pages; return each one.
|
|
14
|
+
- When you update, return the COMPLETE new page: keep everything already on it, word for word, including people's attributions. Add the new facts in the section where they belong.
|
|
15
|
+
- When this part says something different from what the page already says, keep both statements with their attributions and make the difference explicit; never delete what someone else said. Also list each contradiction in `conflicts`.
|
|
16
|
+
- Attribute every fact you add as ({{ source.label }}, {{ captured_on }}).
|
|
17
|
+
- Follow the WIKI_SCHEMA. Write in the language of the page, or of the document for a new page.
|
|
18
|
+
- If this part has nothing worth keeping, return an empty `pages` list.
|
|
19
|
+
|
|
20
|
+
Answer with JSON following the schema: a list `pages`, each with `action` (create or update), `target_page_id` (the page_id you update, or null), `title`, `summary` (one sentence on what the page covers), `markdown` (the page body without frontmatter, starting with `# Title`) and `change_summary` (one short sentence for the page history); and a list `conflicts`, one per contradiction with what a page already said: `page_title`, `existing_statement` (what the page said, as written), `existing_source` (its attribution), `new_statement` and `new_source` ({{ source.label }}, {{ captured_on }}). An empty list when nothing contradicts.
|
|
21
|
+
|
|
22
|
+
SOURCE:
|
|
23
|
+
{{ source | json }}
|
|
24
|
+
|
|
25
|
+
PART {{ part.index }} OF {{ part.total }}:
|
|
26
|
+
{{ part.text }}
|
|
27
|
+
|
|
28
|
+
WIKI_SCHEMA:
|
|
29
|
+
{{ wiki_schema }}
|
|
30
|
+
|
|
31
|
+
PAGE_INDEX:
|
|
32
|
+
{{ page_index | json }}
|
|
33
|
+
|
|
34
|
+
CANDIDATE_PAGES:
|
|
35
|
+
{{ candidate_pages | json }}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
You maintain the company's Memory: a wiki of how things are actually done in this company (procedures, rules, exceptions, who decides). It is written from what its people explain and from the company's own documents and images.
|
|
2
|
+
|
|
3
|
+
An image was loaded into Memory (SOURCE); it comes attached. Look at it and bring into the wiki what it teaches about how things are done here: the steps of a diagram, the decisions of a whiteboard, the fields and rules of a form, the values of a screenshot.
|
|
4
|
+
|
|
5
|
+
- Take facts, rules, procedures, responsibilities, amounts and definitions someone in the company would need. Describe what the image says, not what it looks like.
|
|
6
|
+
- If the image has nothing worth keeping (a logo, a photo of people, decoration), return an empty `pages` list.
|
|
7
|
+
- Update one of the CANDIDATE_PAGES when the image belongs to its subject; create a new page when none covers it (check PAGE_INDEX first so you do not duplicate a page).
|
|
8
|
+
- When you update, return the COMPLETE new page: keep everything already on it, word for word, including people's attributions.
|
|
9
|
+
- When the image says something different from what a page already says, keep both statements with their attributions and list each contradiction in `conflicts`.
|
|
10
|
+
- Attribute every fact you add as ({{ source.label }}, {{ captured_on }}).
|
|
11
|
+
- Follow the WIKI_SCHEMA. Write in the language of the page, or of the text in the image for a new page.
|
|
12
|
+
|
|
13
|
+
Answer with JSON following the schema: a list `pages`, each with `action` (create or update), `target_page_id` (the page_id you update, or null), `title`, `summary`, `markdown` (the page body without frontmatter, starting with `# Title`) and `change_summary`; and a list `conflicts` (`page_title`, `existing_statement`, `existing_source`, `new_statement`, `new_source`), empty when nothing contradicts.
|
|
14
|
+
|
|
15
|
+
SOURCE:
|
|
16
|
+
{{ source | json }}
|
|
17
|
+
|
|
18
|
+
WIKI_SCHEMA:
|
|
19
|
+
{{ wiki_schema }}
|
|
20
|
+
|
|
21
|
+
PAGE_INDEX:
|
|
22
|
+
{{ page_index | json }}
|
|
23
|
+
|
|
24
|
+
CANDIDATE_PAGES:
|
|
25
|
+
{{ candidate_pages | json }}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
You maintain the company's Memory: a wiki of how things are actually done in this company (procedures, rules, exceptions, who decides). It is written from what its people explain and from the company's own documents.
|
|
2
|
+
|
|
3
|
+
A meeting transcript was loaded into Memory (SOURCE). You receive it in parts; this is part {{ part.index }} of {{ part.total }} (PART). Bring into the wiki what the meeting decided about how things are done here.
|
|
4
|
+
|
|
5
|
+
What to take:
|
|
6
|
+
|
|
7
|
+
- Decisions that were made ("from now on, discounts over 10% need the manager"), with who decided when the transcript says so.
|
|
8
|
+
- Procedures, rules, deadlines and amounts that were agreed or explained, and who is responsible for what.
|
|
9
|
+
- Not the conversation itself: no greetings, small talk, opinions that led nowhere, ideas that were only discussed, or who said what along the way.
|
|
10
|
+
- Nothing personal or sensitive about the people in the meeting (health, salaries, performance, private matters), even if it was said.
|
|
11
|
+
- A transcript is spoken language and may have recognition errors: write the knowledge clearly, and when a name, number or term is unclear, leave it out rather than guess.
|
|
12
|
+
- An action item ("Juan will send the price list on Friday") is not knowledge on its own; keep it only when it reveals how something is done or who is responsible for it.
|
|
13
|
+
|
|
14
|
+
How to write the pages:
|
|
15
|
+
|
|
16
|
+
- Update one of the CANDIDATE_PAGES when the part belongs to its subject; create a new page when none covers it (check PAGE_INDEX first so you do not duplicate a page). One part may touch several pages; return each one.
|
|
17
|
+
- When you update, return the COMPLETE new page: keep everything already on it, word for word, including people's attributions. Add the new facts in the section where they belong.
|
|
18
|
+
- When this part says something different from what the page already says, keep both statements with their attributions and make the difference explicit; never delete what someone else said. Also list each contradiction in `conflicts`. A meeting that changes a rule is a contradiction worth showing.
|
|
19
|
+
- Attribute every fact you add to the meeting: ({{ source.label }}, {{ captured_on }}).
|
|
20
|
+
- Follow the WIKI_SCHEMA. Write in the language of the page, or of the transcript for a new page.
|
|
21
|
+
- If this part decided or taught nothing worth keeping, return an empty `pages` list.
|
|
22
|
+
|
|
23
|
+
Answer with JSON following the schema: a list `pages`, each with `action` (create or update), `target_page_id` (the page_id you update, or null), `title`, `summary` (one sentence on what the page covers), `markdown` (the page body without frontmatter, starting with `# Title`) and `change_summary` (one short sentence for the page history); and a list `conflicts`, one per contradiction with what a page already said: `page_title`, `existing_statement` (what the page said, as written), `existing_source` (its attribution), `new_statement` and `new_source` ({{ source.label }}, {{ captured_on }}). An empty list when nothing contradicts.
|
|
24
|
+
|
|
25
|
+
SOURCE:
|
|
26
|
+
{{ source | json }}
|
|
27
|
+
|
|
28
|
+
PART {{ part.index }} OF {{ part.total }}:
|
|
29
|
+
{{ part.text }}
|
|
30
|
+
|
|
31
|
+
WIKI_SCHEMA:
|
|
32
|
+
{{ wiki_schema }}
|
|
33
|
+
|
|
34
|
+
PAGE_INDEX:
|
|
35
|
+
{{ page_index | json }}
|
|
36
|
+
|
|
37
|
+
CANDIDATE_PAGES:
|
|
38
|
+
{{ candidate_pages | json }}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
# System agents: model calls the platform makes on its own (see
|
|
2
|
+
# services/system_agent_catalog.py). The tenant may pick each one's model
|
|
3
|
+
# (system_agents.<key>.model in company.yaml); the prompt, inputs and output
|
|
4
|
+
# schema belong to the code that reads the answer and are not editable.
|
|
5
|
+
#
|
|
6
|
+
# `prompt` is a Jinja template in system_agents/, rendered with `inputs`.
|
|
7
|
+
# `default_model: null` means the company's default model.
|
|
8
|
+
version: 1
|
|
9
|
+
|
|
10
|
+
schemas:
|
|
11
|
+
# A Memoria page created, updated or left alone.
|
|
12
|
+
memory_page:
|
|
13
|
+
type: object
|
|
14
|
+
properties:
|
|
15
|
+
action:
|
|
16
|
+
type: string
|
|
17
|
+
enum: [create, update, skip]
|
|
18
|
+
# Nullable as a type list: the structured-output validator rejects null under anyOf.
|
|
19
|
+
target_page_id:
|
|
20
|
+
type: [integer, "null"]
|
|
21
|
+
title:
|
|
22
|
+
type: string
|
|
23
|
+
summary:
|
|
24
|
+
type: string
|
|
25
|
+
markdown:
|
|
26
|
+
type: string
|
|
27
|
+
change_summary:
|
|
28
|
+
type: string
|
|
29
|
+
# Only what a page cannot do without: models often drop the optional
|
|
30
|
+
# fields, and a near miss is repaired by the compiler's normalizer.
|
|
31
|
+
required: [action, target_page_id, title, markdown]
|
|
32
|
+
additionalProperties: false
|
|
33
|
+
|
|
34
|
+
# A memory_page plus the contradictions found while writing it (BL-014).
|
|
35
|
+
memory_page_with_conflicts:
|
|
36
|
+
type: object
|
|
37
|
+
properties:
|
|
38
|
+
action:
|
|
39
|
+
type: string
|
|
40
|
+
enum: [create, update, skip]
|
|
41
|
+
target_page_id:
|
|
42
|
+
type: [integer, "null"]
|
|
43
|
+
title:
|
|
44
|
+
type: string
|
|
45
|
+
summary:
|
|
46
|
+
type: string
|
|
47
|
+
markdown:
|
|
48
|
+
type: string
|
|
49
|
+
change_summary:
|
|
50
|
+
type: string
|
|
51
|
+
conflicts:
|
|
52
|
+
type: array
|
|
53
|
+
items:
|
|
54
|
+
type: object
|
|
55
|
+
properties:
|
|
56
|
+
existing_statement:
|
|
57
|
+
type: string
|
|
58
|
+
existing_source:
|
|
59
|
+
type: string
|
|
60
|
+
new_statement:
|
|
61
|
+
type: string
|
|
62
|
+
new_source:
|
|
63
|
+
type: string
|
|
64
|
+
required: [existing_statement, new_statement]
|
|
65
|
+
additionalProperties: false
|
|
66
|
+
required: [action, target_page_id, title, markdown]
|
|
67
|
+
additionalProperties: false
|
|
68
|
+
|
|
69
|
+
agents:
|
|
70
|
+
- key: memory_compiler
|
|
71
|
+
name: Compilador de Memoria
|
|
72
|
+
name_en: Memory compiler
|
|
73
|
+
description: >-
|
|
74
|
+
(Memoria de la empresa) Integra lo que la gente guarda en Memoria en la página que corresponde,
|
|
75
|
+
o crea una nueva, atribuyendo cada dato a su autor.
|
|
76
|
+
description_en: >-
|
|
77
|
+
(Company memory) Files what people save in Memory into the right page, or creates a new
|
|
78
|
+
one, attributing every fact to its author.
|
|
79
|
+
module: memory
|
|
80
|
+
prompt: memory_compiler.prompt
|
|
81
|
+
output_schema: memory_page_with_conflicts
|
|
82
|
+
inputs: [author, captured_on, wiki_schema, page_index, capture, candidate_pages]
|
|
83
|
+
default_model: null
|
|
84
|
+
|
|
85
|
+
- key: memory_correction
|
|
86
|
+
name: Corrector de Memoria
|
|
87
|
+
name_en: Memory corrector
|
|
88
|
+
description: >-
|
|
89
|
+
(Memoria de la empresa) Aplica a una página de Memoria el cambio que alguien pidió, sin tocar el
|
|
90
|
+
resto de la página.
|
|
91
|
+
description_en: >-
|
|
92
|
+
(Company memory) Applies to a Memory page the change someone asked for, leaving the rest
|
|
93
|
+
of the page as it is.
|
|
94
|
+
module: memory
|
|
95
|
+
prompt: memory_correction.prompt
|
|
96
|
+
output_schema: memory_page
|
|
97
|
+
inputs: [author, captured_on, request, page]
|
|
98
|
+
default_model: null
|
|
99
|
+
|
|
100
|
+
- key: memory_question_review
|
|
101
|
+
name: Revisión de preguntas sin respuesta
|
|
102
|
+
name_en: Unanswered questions review
|
|
103
|
+
description: >-
|
|
104
|
+
(Memoria de la empresa) Revisa las conversaciones que buscaron en Memoria o en los documentos y
|
|
105
|
+
detecta las preguntas que la IA no pudo responder.
|
|
106
|
+
description_en: >-
|
|
107
|
+
(Company memory) Reviews the conversations that searched Memory or the documents and finds
|
|
108
|
+
the questions the AI could not answer.
|
|
109
|
+
module: memory
|
|
110
|
+
prompt: memory_question_review.prompt
|
|
111
|
+
output_schema:
|
|
112
|
+
type: object
|
|
113
|
+
properties:
|
|
114
|
+
items:
|
|
115
|
+
type: array
|
|
116
|
+
items:
|
|
117
|
+
type: object
|
|
118
|
+
properties:
|
|
119
|
+
ref:
|
|
120
|
+
type: string
|
|
121
|
+
answered:
|
|
122
|
+
type: boolean
|
|
123
|
+
question:
|
|
124
|
+
type: string
|
|
125
|
+
topic:
|
|
126
|
+
type: string
|
|
127
|
+
# Nullable as a type list: core's validator rejects null under anyOf.
|
|
128
|
+
same_as_question_id:
|
|
129
|
+
type: [integer, "null"]
|
|
130
|
+
same_as_ref:
|
|
131
|
+
type: [string, "null"]
|
|
132
|
+
required: [ref, answered]
|
|
133
|
+
additionalProperties: false
|
|
134
|
+
required: [items]
|
|
135
|
+
additionalProperties: false
|
|
136
|
+
inputs: [open_questions, turns]
|
|
137
|
+
default_model: null
|
|
138
|
+
|
|
139
|
+
- key: memory_document_ingest
|
|
140
|
+
name: Lector de documentos de Memoria
|
|
141
|
+
name_en: Memory document reader
|
|
142
|
+
description: >-
|
|
143
|
+
(Memoria de la empresa) Lee los documentos que se cargan en Memoria, tramo
|
|
144
|
+
por tramo, y lleva a las páginas de la wiki lo que enseñan sobre cómo se hacen
|
|
145
|
+
las cosas, citando el documento.
|
|
146
|
+
description_en: >-
|
|
147
|
+
(Company memory) Reads the documents loaded into Memory, part by part, and
|
|
148
|
+
files into the wiki pages what they teach about how things are done, citing
|
|
149
|
+
the document.
|
|
150
|
+
module: memory
|
|
151
|
+
prompt: memory_document_ingest.prompt
|
|
152
|
+
output_schema:
|
|
153
|
+
type: object
|
|
154
|
+
properties:
|
|
155
|
+
pages:
|
|
156
|
+
type: array
|
|
157
|
+
items:
|
|
158
|
+
type: object
|
|
159
|
+
properties:
|
|
160
|
+
action:
|
|
161
|
+
type: string
|
|
162
|
+
enum: [create, update]
|
|
163
|
+
# Nullable as a type list: the structured-output validator rejects null under anyOf.
|
|
164
|
+
target_page_id:
|
|
165
|
+
type: [integer, "null"]
|
|
166
|
+
title:
|
|
167
|
+
type: string
|
|
168
|
+
summary:
|
|
169
|
+
type: string
|
|
170
|
+
markdown:
|
|
171
|
+
type: string
|
|
172
|
+
change_summary:
|
|
173
|
+
type: string
|
|
174
|
+
required: [action, target_page_id, title, markdown]
|
|
175
|
+
additionalProperties: false
|
|
176
|
+
conflicts:
|
|
177
|
+
type: array
|
|
178
|
+
items:
|
|
179
|
+
type: object
|
|
180
|
+
properties:
|
|
181
|
+
page_title:
|
|
182
|
+
type: string
|
|
183
|
+
existing_statement:
|
|
184
|
+
type: string
|
|
185
|
+
existing_source:
|
|
186
|
+
type: string
|
|
187
|
+
new_statement:
|
|
188
|
+
type: string
|
|
189
|
+
new_source:
|
|
190
|
+
type: string
|
|
191
|
+
required: [page_title, existing_statement, new_statement]
|
|
192
|
+
additionalProperties: false
|
|
193
|
+
required: [pages]
|
|
194
|
+
additionalProperties: false
|
|
195
|
+
inputs: [source, part, captured_on, wiki_schema, page_index, candidate_pages]
|
|
196
|
+
default_model: null
|
|
197
|
+
|
|
198
|
+
- key: memory_meeting_ingest
|
|
199
|
+
name: Lector de reuniones de Memoria
|
|
200
|
+
name_en: Memory meeting reader
|
|
201
|
+
description: >-
|
|
202
|
+
(Memoria de la empresa) Lee las transcripciones de reuniones de las carpetas
|
|
203
|
+
marcadas como reuniones y lleva a la wiki las decisiones, los procedimientos y
|
|
204
|
+
los responsables que se acordaron, no la conversación.
|
|
205
|
+
description_en: >-
|
|
206
|
+
(Company memory) Reads the meeting transcripts of the folders marked as
|
|
207
|
+
meetings and files into the wiki the decisions, procedures and owners agreed,
|
|
208
|
+
not the conversation.
|
|
209
|
+
module: memory
|
|
210
|
+
prompt: memory_meeting_ingest.prompt
|
|
211
|
+
output_schema:
|
|
212
|
+
type: object
|
|
213
|
+
properties:
|
|
214
|
+
pages:
|
|
215
|
+
type: array
|
|
216
|
+
items:
|
|
217
|
+
type: object
|
|
218
|
+
properties:
|
|
219
|
+
action:
|
|
220
|
+
type: string
|
|
221
|
+
enum: [create, update]
|
|
222
|
+
# Nullable as a type list: the structured-output validator rejects null under anyOf.
|
|
223
|
+
target_page_id:
|
|
224
|
+
type: [integer, "null"]
|
|
225
|
+
title:
|
|
226
|
+
type: string
|
|
227
|
+
summary:
|
|
228
|
+
type: string
|
|
229
|
+
markdown:
|
|
230
|
+
type: string
|
|
231
|
+
change_summary:
|
|
232
|
+
type: string
|
|
233
|
+
required: [action, target_page_id, title, markdown]
|
|
234
|
+
additionalProperties: false
|
|
235
|
+
conflicts:
|
|
236
|
+
type: array
|
|
237
|
+
items:
|
|
238
|
+
type: object
|
|
239
|
+
properties:
|
|
240
|
+
page_title:
|
|
241
|
+
type: string
|
|
242
|
+
existing_statement:
|
|
243
|
+
type: string
|
|
244
|
+
existing_source:
|
|
245
|
+
type: string
|
|
246
|
+
new_statement:
|
|
247
|
+
type: string
|
|
248
|
+
new_source:
|
|
249
|
+
type: string
|
|
250
|
+
required: [page_title, existing_statement, new_statement]
|
|
251
|
+
additionalProperties: false
|
|
252
|
+
required: [pages]
|
|
253
|
+
additionalProperties: false
|
|
254
|
+
inputs: [source, part, captured_on, wiki_schema, page_index, candidate_pages]
|
|
255
|
+
default_model: null
|
|
256
|
+
|
|
257
|
+
- key: memory_image_ingest
|
|
258
|
+
name: Lector de imágenes de Memoria
|
|
259
|
+
name_en: Memory image reader
|
|
260
|
+
description: >-
|
|
261
|
+
(Memoria de la empresa) Mira las imágenes que se cargan en Memoria
|
|
262
|
+
(diagramas, fotos de pizarras, capturas de pantalla, formularios) y lleva a la
|
|
263
|
+
wiki lo que enseñan sobre cómo se hacen las cosas, citando la imagen.
|
|
264
|
+
description_en: >-
|
|
265
|
+
(Company memory) Looks at the images loaded into Memory (diagrams, whiteboard
|
|
266
|
+
photos, screenshots, forms) and files into the wiki what they teach about how
|
|
267
|
+
things are done, citing the image.
|
|
268
|
+
module: memory
|
|
269
|
+
prompt: memory_image_ingest.prompt
|
|
270
|
+
requires_vision: true
|
|
271
|
+
output_schema:
|
|
272
|
+
type: object
|
|
273
|
+
properties:
|
|
274
|
+
pages:
|
|
275
|
+
type: array
|
|
276
|
+
items:
|
|
277
|
+
type: object
|
|
278
|
+
properties:
|
|
279
|
+
action:
|
|
280
|
+
type: string
|
|
281
|
+
enum: [create, update]
|
|
282
|
+
target_page_id:
|
|
283
|
+
type: [integer, "null"]
|
|
284
|
+
title:
|
|
285
|
+
type: string
|
|
286
|
+
summary:
|
|
287
|
+
type: string
|
|
288
|
+
markdown:
|
|
289
|
+
type: string
|
|
290
|
+
change_summary:
|
|
291
|
+
type: string
|
|
292
|
+
required: [action, target_page_id, title, markdown]
|
|
293
|
+
additionalProperties: false
|
|
294
|
+
conflicts:
|
|
295
|
+
type: array
|
|
296
|
+
items:
|
|
297
|
+
type: object
|
|
298
|
+
properties:
|
|
299
|
+
page_title:
|
|
300
|
+
type: string
|
|
301
|
+
existing_statement:
|
|
302
|
+
type: string
|
|
303
|
+
existing_source:
|
|
304
|
+
type: string
|
|
305
|
+
new_statement:
|
|
306
|
+
type: string
|
|
307
|
+
new_source:
|
|
308
|
+
type: string
|
|
309
|
+
required: [page_title, existing_statement, new_statement]
|
|
310
|
+
additionalProperties: false
|
|
311
|
+
required: [pages]
|
|
312
|
+
additionalProperties: false
|
|
313
|
+
inputs: [source, captured_on, wiki_schema, page_index, candidate_pages]
|
|
314
|
+
default_model: null
|
|
@@ -575,6 +575,64 @@ tools:
|
|
|
575
575
|
required:
|
|
576
576
|
- content
|
|
577
577
|
- title
|
|
578
|
+
- function_name: iat_memory_pending_questions
|
|
579
|
+
description: Lista las preguntas sobre la empresa que la IA no supo responder y siguen abiertas, primero las que se le sugirieron a este usuario por ser quien más sabe del tema, después las más preguntadas. Úsala cuando el usuario pregunte qué preguntas tiene pendientes, quiera ayudar a completar la Memoria de la empresa o pida responder las preguntas de su área. Para responder una, usa `iat_memory_answer_question`.
|
|
580
|
+
routing_profile:
|
|
581
|
+
tags:
|
|
582
|
+
- memory
|
|
583
|
+
- company_memory
|
|
584
|
+
- questions
|
|
585
|
+
- pending
|
|
586
|
+
- unanswered
|
|
587
|
+
intents:
|
|
588
|
+
- List the unanswered questions the user could answer.
|
|
589
|
+
- Show the questions suggested to the user for their area.
|
|
590
|
+
examples:
|
|
591
|
+
- iat_memory_pending_questions(limit=5)
|
|
592
|
+
cost:
|
|
593
|
+
penalty: 0.1
|
|
594
|
+
latency_class: low
|
|
595
|
+
expensive: false
|
|
596
|
+
parameters:
|
|
597
|
+
type: object
|
|
598
|
+
properties:
|
|
599
|
+
limit:
|
|
600
|
+
type: integer
|
|
601
|
+
description: Cuántas preguntas listar, como máximo 15.
|
|
602
|
+
required: []
|
|
603
|
+
- function_name: iat_memory_answer_question
|
|
604
|
+
description: Responde una pregunta sin respuesta de la Memoria de la empresa (de `iat_memory_pending_questions`). La respuesta queda en la Memoria con el nombre del usuario, la ve TODA la empresa, y la pregunta deja de estar pendiente. Antes de llamarla, muéstrale al usuario el texto que vas a guardar y espera que lo confirme. Redacta `answer` en tono neutro, completo y autocontenido, con solo lo que el usuario dijo.
|
|
605
|
+
execution_config:
|
|
606
|
+
side_effects: true
|
|
607
|
+
destructive: false
|
|
608
|
+
routing_profile:
|
|
609
|
+
tags:
|
|
610
|
+
- memory
|
|
611
|
+
- company_memory
|
|
612
|
+
- questions
|
|
613
|
+
- answer
|
|
614
|
+
- know_how
|
|
615
|
+
intents:
|
|
616
|
+
- Answer an unanswered question of the company memory with what the user explained.
|
|
617
|
+
- Use only after the user confirms the text to save.
|
|
618
|
+
examples:
|
|
619
|
+
- iat_memory_answer_question(question_id=12, answer="El plazo de pago a proveedores es de 45 días desde la factura; para proveedores nuevos, 30.")
|
|
620
|
+
cost:
|
|
621
|
+
penalty: 0.1
|
|
622
|
+
latency_class: medium
|
|
623
|
+
expensive: false
|
|
624
|
+
parameters:
|
|
625
|
+
type: object
|
|
626
|
+
properties:
|
|
627
|
+
question_id:
|
|
628
|
+
type: integer
|
|
629
|
+
description: El id de la pregunta, de `iat_memory_pending_questions`.
|
|
630
|
+
answer:
|
|
631
|
+
type: string
|
|
632
|
+
description: La respuesta, redactada en tono neutro y autocontenida (debe entenderse sin la conversación).
|
|
633
|
+
required:
|
|
634
|
+
- question_id
|
|
635
|
+
- answer
|
|
578
636
|
- function_name: iat_image_search
|
|
579
637
|
description: Busca imágenes en la base de conocimiento visual de la empresa usando una descripción de texto. Útil cuando el usuario pide 'ver' algo, 'muéstrame una foto de...', o busca gráficos y diagramas.
|
|
580
638
|
routing:
|
{iatoolkit-2.65.2 → iatoolkit-2.67.0}/src/iatoolkit/infra/connectors/local_file_connector.py
RENAMED
|
@@ -91,5 +91,7 @@ class LocalFileConnector(FileConnector):
|
|
|
91
91
|
raise IAToolkitException(IAToolkitException.ErrorType.FILE_IO_ERROR,
|
|
92
92
|
f"Error eliminando el archivo {file_path}: {e}")
|
|
93
93
|
|
|
94
|
-
def generate_presigned_url(self, file_path: str, expiration: int = 3600) -> str:
|
|
95
|
-
|
|
94
|
+
def generate_presigned_url(self, file_path: str, expiration: int = 3600) -> str | None:
|
|
95
|
+
# FileConnector allows None when storage has no external URL. RAG
|
|
96
|
+
# results can still return their text, and Flask streams downloads.
|
|
97
|
+
return None
|
|
@@ -9,7 +9,9 @@ from iatoolkit.repositories.database_manager import DatabaseManager
|
|
|
9
9
|
from iatoolkit.repositories.models import (
|
|
10
10
|
MemoryCapture,
|
|
11
11
|
MemoryCaptureStatus,
|
|
12
|
+
MemoryConflict,
|
|
12
13
|
MemoryItem,
|
|
14
|
+
MemoryPageDocument,
|
|
13
15
|
MemoryWikiPageSource,
|
|
14
16
|
)
|
|
15
17
|
|
|
@@ -167,6 +169,93 @@ class MemoryRepo:
|
|
|
167
169
|
)
|
|
168
170
|
return [page_id for (page_id,) in rows]
|
|
169
171
|
|
|
172
|
+
def add_page_document(self, company_id: int, wiki_page_id: int, document_id: int, label: str | None) -> None:
|
|
173
|
+
"""Records that a page took facts from a RAG document (BL-014); keeps one link per pair."""
|
|
174
|
+
if not company_id or not wiki_page_id or not document_id:
|
|
175
|
+
return
|
|
176
|
+
link = (
|
|
177
|
+
self.session.query(MemoryPageDocument)
|
|
178
|
+
.filter_by(wiki_page_id=wiki_page_id, document_id=document_id)
|
|
179
|
+
.first()
|
|
180
|
+
)
|
|
181
|
+
if link is None:
|
|
182
|
+
self.session.add(MemoryPageDocument(
|
|
183
|
+
company_id=company_id,
|
|
184
|
+
wiki_page_id=wiki_page_id,
|
|
185
|
+
document_id=document_id,
|
|
186
|
+
label=(label or "")[:300] or None,
|
|
187
|
+
))
|
|
188
|
+
elif label and link.label != label:
|
|
189
|
+
link.label = label[:300]
|
|
190
|
+
self.session.commit()
|
|
191
|
+
|
|
192
|
+
def list_page_ids_for_document(self, company_id: int, document_id: int) -> list[int]:
|
|
193
|
+
if not company_id or not document_id:
|
|
194
|
+
return []
|
|
195
|
+
rows = (
|
|
196
|
+
self.session.query(MemoryPageDocument.wiki_page_id)
|
|
197
|
+
.filter_by(company_id=company_id, document_id=document_id)
|
|
198
|
+
.order_by(MemoryPageDocument.id.asc())
|
|
199
|
+
.all()
|
|
200
|
+
)
|
|
201
|
+
return [page_id for (page_id,) in rows]
|
|
202
|
+
|
|
203
|
+
def list_page_documents(self, wiki_page_id: int) -> list[MemoryPageDocument]:
|
|
204
|
+
if not wiki_page_id:
|
|
205
|
+
return []
|
|
206
|
+
return (
|
|
207
|
+
self.session.query(MemoryPageDocument)
|
|
208
|
+
.filter_by(wiki_page_id=wiki_page_id)
|
|
209
|
+
.order_by(MemoryPageDocument.id.asc())
|
|
210
|
+
.all()
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
def list_document_links(self, company_id: int, document_id: int) -> list[MemoryPageDocument]:
|
|
214
|
+
if not company_id or not document_id:
|
|
215
|
+
return []
|
|
216
|
+
return (
|
|
217
|
+
self.session.query(MemoryPageDocument)
|
|
218
|
+
.filter_by(company_id=company_id, document_id=document_id)
|
|
219
|
+
.order_by(MemoryPageDocument.id.asc())
|
|
220
|
+
.all()
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
def list_obsolete_page_documents(self, company_id: int, limit: int = 50) -> list[MemoryPageDocument]:
|
|
224
|
+
"""Pages that cite a deleted document and nobody reviewed yet."""
|
|
225
|
+
if not company_id:
|
|
226
|
+
return []
|
|
227
|
+
return (
|
|
228
|
+
self.session.query(MemoryPageDocument)
|
|
229
|
+
.filter(MemoryPageDocument.company_id == company_id,
|
|
230
|
+
MemoryPageDocument.removed_at.isnot(None),
|
|
231
|
+
MemoryPageDocument.reviewed_at.is_(None))
|
|
232
|
+
.order_by(MemoryPageDocument.removed_at.desc())
|
|
233
|
+
.limit(limit)
|
|
234
|
+
.all()
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
def get_page_document(self, company_id: int, link_id: int) -> MemoryPageDocument | None:
|
|
238
|
+
return self.session.query(MemoryPageDocument).filter_by(company_id=company_id, id=link_id).first()
|
|
239
|
+
|
|
240
|
+
def add_conflict(self, conflict: MemoryConflict) -> MemoryConflict:
|
|
241
|
+
self.session.add(conflict)
|
|
242
|
+
self.session.commit()
|
|
243
|
+
return conflict
|
|
244
|
+
|
|
245
|
+
def list_open_conflicts(self, company_id: int, limit: int = 50) -> list[MemoryConflict]:
|
|
246
|
+
if not company_id:
|
|
247
|
+
return []
|
|
248
|
+
return (
|
|
249
|
+
self.session.query(MemoryConflict)
|
|
250
|
+
.filter_by(company_id=company_id, status=MemoryConflict.STATUS_OPEN)
|
|
251
|
+
.order_by(MemoryConflict.created_at.desc())
|
|
252
|
+
.limit(limit)
|
|
253
|
+
.all()
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
def get_conflict(self, company_id: int, conflict_id: int) -> MemoryConflict | None:
|
|
257
|
+
return self.session.query(MemoryConflict).filter_by(company_id=company_id, id=conflict_id).first()
|
|
258
|
+
|
|
170
259
|
def delete_page_sources_for_item(self, item_id: int) -> None:
|
|
171
260
|
"""Unlinks an item from every page. The pages themselves are never touched."""
|
|
172
261
|
if not item_id:
|