iatoolkit 2.75.3__tar.gz → 2.76.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.75.3/src/iatoolkit.egg-info → iatoolkit-2.76.0}/PKG-INFO +1 -1
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/__init__.py +1 -1
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_tools_pack.yaml +29 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/dispatcher_service.py +1 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/history_compaction_service.py +3 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/history_manager_service.py +9 -5
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/llm_client_service.py +23 -1
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/memory_question_service.py +80 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/tool_service.py +13 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0/src/iatoolkit.egg-info}/PKG-INFO +1 -1
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/LICENSE +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/LICENSE_COMMUNITY.md +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/pyproject.toml +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/readme.md +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/setup.cfg +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/base_company.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/cli_commands.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/__init__.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/access.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/bridge_validation.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/company_paths.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/exceptions.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/interfaces/__init__.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/interfaces/history_compaction_trigger.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/memory_tools.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/model_registry.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/routes.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/search_terms.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/secret_resolver.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/session_manager.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/text_splitter.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/url_safety.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/util.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/company_registry.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/__init__.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_agents/history_compaction.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_agents/memory_compiler.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_agents/memory_correction.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_agents/memory_document_ingest.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_agents/memory_image_ingest.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_agents/memory_meeting_ingest.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_agents/memory_question_review.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_agents_pack.yaml +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/core.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/__init__.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/call_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/connectors/__init__.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/google_auth_client.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/google_chat_app.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/inference_handler.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/llm_proxy.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/llm_response.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/redis_session_manager.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/locales/en.yaml +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/locales/es.yaml +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/__init__.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/advisory_lock.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/api_key_repo.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/bridge_repo.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/database_manager.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/document_repo.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/memory_question_repo.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/memory_repo.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/memory_usage_repo.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/models.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/profile_repo.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/vs_repo.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/runtime_logging.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/__init__.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/api_key_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/attachment_policy_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/auth_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/branding_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/company_context_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/configuration_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/context_builder_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/embedding_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/excel_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/file_processor_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/http_tool_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/i18n_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/inference_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/jwt_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/knowledge_base_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/language_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/license_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/mail_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/mcp_token_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/memory_compiler_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/memory_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/memory_sources.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/memory_usage_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/memory_wiki_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/noop_history_compaction_trigger.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/operator_identity_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/parsers/__init__.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/parsers/contracts.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/parsers/validator.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/pdf_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/profile_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/prompt_resource_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/prompt_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/query_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/resource_access_scope.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/sql_catalog_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/sql_dataset_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/sql_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/sql_source_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/storage_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/structured_output_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/system_agent_catalog.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/system_agent_runner.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/system_tools.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/telemetry_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/tool_output_contract.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/user_feedback_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/user_session_context_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/visual_kb_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/visual_tool_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/warmup_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/web_search/__init__.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/web_search_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/services/wiki_page_index_service.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/images/favicon.ico +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/images/favicon.png +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/images/fernando.jpeg +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/js/chat_filepond.js +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/js/chat_header_navigation.js +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/js/chat_help_content.js +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/js/chat_history_button.js +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/js/chat_main.js +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/styles/account.css +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/styles/chat_modal.css +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/styles/chat_public.css +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/styles/documents.css +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/styles/landing_page.css +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/styles/llm_output.css +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/styles/onboarding.css +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/static/styles/wiki_page.css +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/_chat_header.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/_company_header.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/_login_widget.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/account.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/base.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/change_password.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/chat.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/chat_modals.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/error.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/forgot_password.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/home_hosted_default.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/login_global.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/pdf/base.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/pdf/letter.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/pdf/report.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/pdf/simple.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/signup.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/templates/wiki_page.html +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/__init__.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/account_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/api_key_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/base_login_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/categories_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/change_password_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/chat_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/configuration_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/connectors_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/embedding_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/forgot_password_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/help_content_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/history_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/home_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/init_context_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/llmquery_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/load_document_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/login_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/logout_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/memory_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/profile_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/prompt_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/rag_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/root_redirect_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/signup_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/static_page_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/tool_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/users_api_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/verify_user_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/views/wiki_page_view.py +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit.egg-info/requires.txt +0 -0
- {iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit.egg-info/top_level.txt +0 -0
|
@@ -666,6 +666,35 @@ tools:
|
|
|
666
666
|
required:
|
|
667
667
|
- question_id
|
|
668
668
|
- answer
|
|
669
|
+
- function_name: iat_memory_register_question
|
|
670
|
+
description: Registra una pregunta sobre cómo se hacen las cosas en la empresa que la Memoria de la empresa no pudo responder, para que alguien que sabe la responda y la Memoria lo aprenda. Úsala cuando, después de buscar en la Memoria y en los documentos, no encontraste la respuesta, o cuando el usuario pida agregar la pregunta a la Memoria. No guarda quién preguntó. No la uses para preguntas personales, del momento o que no son de la empresa. Cuéntale al usuario que quedó registrada y qué pasa después (o que no se registró, si así lo dice el resultado).
|
|
671
|
+
execution_config:
|
|
672
|
+
side_effects: true
|
|
673
|
+
destructive: false
|
|
674
|
+
routing_profile:
|
|
675
|
+
tags:
|
|
676
|
+
- memory
|
|
677
|
+
- company_memory
|
|
678
|
+
- questions
|
|
679
|
+
- unanswered
|
|
680
|
+
- gap
|
|
681
|
+
intents:
|
|
682
|
+
- Register a question about the company that the memory could not answer.
|
|
683
|
+
- Add the user's question to the company memory's open questions.
|
|
684
|
+
examples:
|
|
685
|
+
- iat_memory_register_question(question="¿Cuál es el procedimiento para emitir una factura en euros?")
|
|
686
|
+
cost:
|
|
687
|
+
penalty: 0.1
|
|
688
|
+
latency_class: low
|
|
689
|
+
expensive: false
|
|
690
|
+
parameters:
|
|
691
|
+
type: object
|
|
692
|
+
properties:
|
|
693
|
+
question:
|
|
694
|
+
type: string
|
|
695
|
+
description: La pregunta, redactada en tono neutro y autocontenida (debe entenderse sin la conversación), sin nombres ni datos personales.
|
|
696
|
+
required:
|
|
697
|
+
- question
|
|
669
698
|
- function_name: iat_image_search
|
|
670
699
|
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.
|
|
671
700
|
routing:
|
|
@@ -31,6 +31,7 @@ class Dispatcher:
|
|
|
31
31
|
"iat_memory_save",
|
|
32
32
|
"iat_memory_pending_questions",
|
|
33
33
|
"iat_memory_answer_question",
|
|
34
|
+
"iat_memory_register_question",
|
|
34
35
|
"iat_wiki_search",
|
|
35
36
|
"iat_wiki_get_page",
|
|
36
37
|
# The schema shown is the person's: their sources and tables (BL-017).
|
|
@@ -300,6 +300,9 @@ class HistoryCompactionService:
|
|
|
300
300
|
return {"status": "skipped", "reason": "history_changed"}
|
|
301
301
|
|
|
302
302
|
compacted = [current[0], HistoryManagerService.summary_message(summary)] + current[plan.cut:]
|
|
303
|
+
# The turns kept verbatim keep their words, not their old tool
|
|
304
|
+
# outputs: else a compaction can leave the history as big as it was.
|
|
305
|
+
HistoryManagerService._trim_old_tool_outputs(compacted)
|
|
303
306
|
self.session_context.save_context_history(company_short_name, user_identifier, compacted, model=model)
|
|
304
307
|
# The provider's last measure described the long history; until the
|
|
305
308
|
# next turn measures again, an estimate keeps the in-line check from
|
|
@@ -54,16 +54,20 @@ class HistoryManagerService:
|
|
|
54
54
|
INLINE_COMPACTION_SHARE = 0.95
|
|
55
55
|
#: The size the history is kept near, whatever the budget: the budget stops
|
|
56
56
|
#: a request from overflowing, this keeps every turn from resending 140k
|
|
57
|
-
#: tokens (70% of the 200k default) before the first compaction.
|
|
58
|
-
#:
|
|
59
|
-
|
|
57
|
+
#: tokens (70% of the 200k default) before the first compaction. 64k
|
|
58
|
+
#: compacted every few SQL turns; with old tool outputs cut, 100k (asks at
|
|
59
|
+
#: 70k) leaves a long conversation alone. A company may set its own with
|
|
60
|
+
#: `llm.compaction_budget_tokens`.
|
|
61
|
+
DEFAULT_COMPACTION_BUDGET_TOKENS = 100000
|
|
60
62
|
|
|
61
63
|
#: Tool outputs of the turns older than this many are cut down in the
|
|
62
64
|
#: stored history: an SQL result or a schema is what the model needs on the
|
|
63
65
|
#: turn that asked for it, and resending it whole on every later turn was
|
|
64
66
|
#: most of the history's growth (4k -> 11k tokens on one SQL turn in
|
|
65
|
-
#: production). The model can call the tool again.
|
|
66
|
-
|
|
67
|
+
#: production). The model can call the tool again. One: the last turn, the
|
|
68
|
+
#: one a follow-up ("of those...") refers to; with two, one turn of 80k of
|
|
69
|
+
#: results kept a compacted history at 130k.
|
|
70
|
+
KEEP_TOOL_OUTPUT_TURNS = 1
|
|
67
71
|
#: What is kept of a cut output: its beginning, enough to remember its shape.
|
|
68
72
|
TRIMMED_TOOL_OUTPUT_CHARS = 1500
|
|
69
73
|
TRIMMED_TOOL_OUTPUT_MARKER = "[tool output trimmed"
|
|
@@ -66,6 +66,16 @@ class llmClient:
|
|
|
66
66
|
# a wiki page withheld).
|
|
67
67
|
TOOL_CALL_RESULT_KEY = "result"
|
|
68
68
|
TOOL_CALL_EXCERPT_MAX_LENGTH = 300
|
|
69
|
+
# The most of one tool output the model reads (~10k tokens). Every round of
|
|
70
|
+
# the loop resends every output, so a few results of hundreds of rows took
|
|
71
|
+
# one turn from 54k to 133k tokens in production (BL-009). Past this, the
|
|
72
|
+
# model is told to narrow the query instead.
|
|
73
|
+
MAX_TOOL_OUTPUT_CHARS = 40000
|
|
74
|
+
TOOL_OUTPUT_CUT_NOTICE = (
|
|
75
|
+
"[Resultado cortado: se muestran {shown} de {total} caracteres. No lo completes ni "
|
|
76
|
+
"lo inventes: si necesitas el resto, vuelve a llamar la herramienta pidiendo menos "
|
|
77
|
+
"(filtros, agregaciones, LIMIT o por partes).]"
|
|
78
|
+
)
|
|
69
79
|
TOOL_RESULT_FAILED_STATUSES = frozenset({"error", "auth_required", "forbidden", "unavailable"})
|
|
70
80
|
|
|
71
81
|
@inject
|
|
@@ -408,7 +418,8 @@ class llmClient:
|
|
|
408
418
|
tool_attachments_count = len(tool_native_attachments or [])
|
|
409
419
|
|
|
410
420
|
# add the return value into the list of messages
|
|
411
|
-
tool_output_text = self.
|
|
421
|
+
tool_output_text = self._cap_tool_output(
|
|
422
|
+
company.short_name, function_name, self._serialize_tool_output(result))
|
|
412
423
|
last_tool_output_message = {
|
|
413
424
|
"type": "function_call_output",
|
|
414
425
|
"call_id": tool_call.call_id,
|
|
@@ -774,6 +785,17 @@ class llmClient:
|
|
|
774
785
|
except Exception:
|
|
775
786
|
return str(result)
|
|
776
787
|
|
|
788
|
+
@classmethod
|
|
789
|
+
def _cap_tool_output(cls, company_short_name: str, function_name: str, text: str) -> str:
|
|
790
|
+
if not isinstance(text, str) or len(text) <= cls.MAX_TOOL_OUTPUT_CHARS:
|
|
791
|
+
return text
|
|
792
|
+
logging.warning(
|
|
793
|
+
f"[{company_short_name}] output of {function_name} cut to {cls.MAX_TOOL_OUTPUT_CHARS} "
|
|
794
|
+
f"of {len(text)} characters."
|
|
795
|
+
)
|
|
796
|
+
notice = cls.TOOL_OUTPUT_CUT_NOTICE.format(shown=cls.MAX_TOOL_OUTPUT_CHARS, total=len(text))
|
|
797
|
+
return f"{text[:cls.MAX_TOOL_OUTPUT_CHARS]}\n{notice}"
|
|
798
|
+
|
|
777
799
|
@staticmethod
|
|
778
800
|
def _split_tool_result_and_native_attachments(result):
|
|
779
801
|
if not isinstance(result, dict):
|
|
@@ -7,6 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
|
|
8
8
|
import json
|
|
9
9
|
import logging
|
|
10
|
+
import re
|
|
10
11
|
from contextlib import contextmanager
|
|
11
12
|
from datetime import datetime, timedelta
|
|
12
13
|
|
|
@@ -206,6 +207,85 @@ class MemoryQuestionService:
|
|
|
206
207
|
except Exception:
|
|
207
208
|
logging.exception("Memoria search miss could not be recorded for %s", company_short_name)
|
|
208
209
|
|
|
210
|
+
# =====================================================================
|
|
211
|
+
# A question someone says the Memoria does not answer
|
|
212
|
+
# =====================================================================
|
|
213
|
+
|
|
214
|
+
# Words that say nothing about the topic of a question.
|
|
215
|
+
QUESTION_STOPWORDS = frozenset({
|
|
216
|
+
"como", "cual", "cuales", "cuando", "cuanto", "cuanta", "cuantos", "cuantas", "donde", "quien", "quienes",
|
|
217
|
+
"para", "pero", "porque", "sobre", "entre", "desde", "hasta", "esta", "este", "estos", "estas", "esto",
|
|
218
|
+
"puedo", "puede", "pueden", "podemos", "debo", "debe", "tiene", "tienen", "tenemos", "hacer", "hace",
|
|
219
|
+
"existe", "algun", "alguna", "empresa", "nuestra", "nuestro", "what", "when", "where", "which", "does",
|
|
220
|
+
"there", "this", "that", "with", "from", "have", "should", "company",
|
|
221
|
+
})
|
|
222
|
+
QUESTION_TOPIC_PREFIX = 5
|
|
223
|
+
|
|
224
|
+
def register_question(self, company_short_name: str, user_identifier: str | None, question: str,
|
|
225
|
+
channel: str = memory_tools.CHANNEL_CHAT) -> dict:
|
|
226
|
+
"""
|
|
227
|
+
A question the Memoria could not answer, as the AI or the person says (chat or MCP).
|
|
228
|
+
Over MCP the answer is written outside IAToolkit, so only they know it went unanswered.
|
|
229
|
+
|
|
230
|
+
It enters as a candidate: the hourly review writes it neutrally, gives it a topic,
|
|
231
|
+
groups it with the open ones and someone is assigned, as with any other. Who asked
|
|
232
|
+
is not kept. A question whose topic is in content the person may not read (a
|
|
233
|
+
restricted folder) is not opened for the whole company (BL-015, hallazgo 1).
|
|
234
|
+
"""
|
|
235
|
+
text = " ".join(str(question or "").split())
|
|
236
|
+
if not text:
|
|
237
|
+
return {"status": "error", "error_message": "question is required"}
|
|
238
|
+
company = self.profile_repo.get_company_by_short_name(company_short_name)
|
|
239
|
+
if not company:
|
|
240
|
+
return {"status": "error", "error_message": "company not found"}
|
|
241
|
+
if self._topic_is_restricted_for(company_short_name, user_identifier, text):
|
|
242
|
+
return {
|
|
243
|
+
"status": "success",
|
|
244
|
+
"registered": False,
|
|
245
|
+
"reason": "restricted",
|
|
246
|
+
"message": "No quedó registrada como pregunta abierta de la empresa: ese tema puede estar en "
|
|
247
|
+
"información de acceso restringido. Consúltalo con la persona a cargo del área.",
|
|
248
|
+
}
|
|
249
|
+
self.question_repo.add(MemoryQuestionCandidate(
|
|
250
|
+
company_id=company.id,
|
|
251
|
+
query_text=text[:self.MAX_CANDIDATE_CHARS],
|
|
252
|
+
source=channel if channel in (memory_tools.CHANNEL_CHAT, memory_tools.CHANNEL_MCP) else memory_tools.CHANNEL_CHAT,
|
|
253
|
+
))
|
|
254
|
+
self.question_repo.commit()
|
|
255
|
+
return {
|
|
256
|
+
"status": "success",
|
|
257
|
+
"registered": True,
|
|
258
|
+
"message": "Registrada. Dentro de la próxima hora se suma a las preguntas sin respuesta de la empresa "
|
|
259
|
+
"(junto a las parecidas) y se le sugiere a quien sabe del tema; cuando alguien la responda, "
|
|
260
|
+
"la Memoria lo aprende.",
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
def _topic_is_restricted_for(self, company_short_name: str, user_identifier: str | None, question: str) -> bool:
|
|
264
|
+
"""Whether a page the person may not read covers the question's topic (its title or summary)."""
|
|
265
|
+
visible = self.memory_service.audiences_for(company_short_name, user_identifier)
|
|
266
|
+
if visible is None:
|
|
267
|
+
return False # they read everything: nothing hidden to give away
|
|
268
|
+
hidden = [page for page in self.memory_service.memory_wiki_service.list_pages(company_short_name)
|
|
269
|
+
if page.get("audience_key") and page.get("audience_key") not in visible]
|
|
270
|
+
if not hidden:
|
|
271
|
+
return False
|
|
272
|
+
words = self._topic_words(question)
|
|
273
|
+
if not words:
|
|
274
|
+
return False
|
|
275
|
+
needed = min(2, len(words))
|
|
276
|
+
for page in hidden:
|
|
277
|
+
page_words = self._topic_words(f"{page.get('title') or ''} {page.get('summary') or ''}")
|
|
278
|
+
if sum(1 for word in words if word in page_words) >= needed:
|
|
279
|
+
return True
|
|
280
|
+
return False
|
|
281
|
+
|
|
282
|
+
@classmethod
|
|
283
|
+
def _topic_words(cls, text: str) -> set[str]:
|
|
284
|
+
"""The question's topic words, cut to a prefix so "bono" and "bonos" match."""
|
|
285
|
+
normalized = MemoryService._normalize_text(text)
|
|
286
|
+
return {word[:cls.QUESTION_TOPIC_PREFIX] for word in re.findall(r"[a-z0-9]+", normalized)
|
|
287
|
+
if len(word) >= 4 and word not in cls.QUESTION_STOPWORDS}
|
|
288
|
+
|
|
209
289
|
def has_pending_work(self, company_short_name: str) -> bool:
|
|
210
290
|
"""Whether a scan would find anything new; lets the hourly dispatch skip quiet tenants."""
|
|
211
291
|
company = self.profile_repo.get_company_by_short_name(company_short_name)
|
|
@@ -121,6 +121,7 @@ class ToolService:
|
|
|
121
121
|
"iat_memory_save": self._handle_memory_save_tool,
|
|
122
122
|
"iat_memory_pending_questions": self._handle_memory_pending_questions_tool,
|
|
123
123
|
"iat_memory_answer_question": self._handle_memory_answer_question_tool,
|
|
124
|
+
"iat_memory_register_question": self._handle_memory_register_question_tool,
|
|
124
125
|
"iat_wiki_search": self._handle_wiki_search_tool,
|
|
125
126
|
"iat_wiki_get_page": self._handle_wiki_get_page_tool,
|
|
126
127
|
"iat_web_search": self._handle_web_search_tool,
|
|
@@ -429,6 +430,18 @@ class ToolService:
|
|
|
429
430
|
return {"status": "error", "error_message": "question_id is required"}
|
|
430
431
|
return self._memory_question_service().answer(company_short_name, question_id, str(answer or ""), user_identifier)
|
|
431
432
|
|
|
433
|
+
def _handle_memory_register_question_tool(self,
|
|
434
|
+
company_short_name: str,
|
|
435
|
+
question: str,
|
|
436
|
+
user_identifier: str | None = None,
|
|
437
|
+
**kwargs):
|
|
438
|
+
"""Registers a question the Memoria could not answer, so someone who knows answers it."""
|
|
439
|
+
if not user_identifier:
|
|
440
|
+
return {"status": "error", "error_message": "memory not available without an identified user"}
|
|
441
|
+
channel = str(kwargs.get("_iat_runtime_source") or "chat").strip() or "chat"
|
|
442
|
+
return self._memory_question_service().register_question(
|
|
443
|
+
company_short_name, user_identifier, str(question or ""), channel=channel)
|
|
444
|
+
|
|
432
445
|
def _handle_memory_save_tool(self,
|
|
433
446
|
company_short_name: str,
|
|
434
447
|
content: str,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/interfaces/history_compaction_trigger.py
RENAMED
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py
RENAMED
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/common/interfaces/web_search_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_agents/history_compaction.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_agents/memory_compiler.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_agents/memory_correction.prompt
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_agents/memory_image_ingest.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/core_identity.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/email_output.prompt
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/format_styles.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/html_structures.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/links_documents.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/output_basics.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/connectors/file_connector_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/connectors/google_drive_connector.py
RENAMED
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/connectors/local_file_connector.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.75.3 → iatoolkit-2.76.0}/src/iatoolkit/repositories/filesystem_asset_repository.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|