iatoolkit 2.74.1__tar.gz → 2.74.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {iatoolkit-2.74.1/src/iatoolkit.egg-info → iatoolkit-2.74.2}/PKG-INFO +1 -1
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/__init__.py +1 -1
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/history_compaction_service.py +98 -20
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/history_manager_service.py +54 -10
- {iatoolkit-2.74.1 → iatoolkit-2.74.2/src/iatoolkit.egg-info}/PKG-INFO +1 -1
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/LICENSE +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/LICENSE_COMMUNITY.md +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/pyproject.toml +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/readme.md +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/setup.cfg +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/base_company.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/cli_commands.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/__init__.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/access.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/bridge_validation.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/company_paths.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/exceptions.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/interfaces/__init__.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/interfaces/history_compaction_trigger.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/memory_tools.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/model_registry.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/routes.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/search_terms.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/secret_resolver.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/session_manager.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/text_splitter.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/url_safety.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/util.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/company_registry.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/__init__.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_agents/history_compaction.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_agents/memory_compiler.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_agents/memory_correction.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_agents/memory_document_ingest.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_agents/memory_image_ingest.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_agents/memory_meeting_ingest.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_agents/memory_question_review.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_agents_pack.yaml +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/core.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/__init__.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/call_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/connectors/__init__.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/google_auth_client.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/google_chat_app.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/inference_handler.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/llm_proxy.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/llm_response.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/redis_session_manager.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/locales/en.yaml +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/locales/es.yaml +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/__init__.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/advisory_lock.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/api_key_repo.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/bridge_repo.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/database_manager.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/document_repo.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/memory_question_repo.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/memory_repo.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/memory_usage_repo.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/models.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/profile_repo.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/repositories/vs_repo.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/runtime_logging.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/__init__.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/api_key_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/attachment_policy_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/auth_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/branding_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/company_context_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/configuration_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/context_builder_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/dispatcher_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/embedding_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/excel_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/file_processor_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/http_tool_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/i18n_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/inference_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/jwt_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/knowledge_base_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/language_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/license_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/llm_client_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/mail_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/mcp_token_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/memory_compiler_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/memory_question_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/memory_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/memory_sources.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/memory_usage_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/memory_wiki_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/noop_history_compaction_trigger.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/operator_identity_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/parsers/__init__.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/parsers/contracts.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/parsers/validator.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/pdf_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/profile_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/prompt_resource_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/prompt_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/query_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/resource_access_scope.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/sql_dataset_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/sql_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/sql_source_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/storage_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/structured_output_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/system_agent_catalog.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/system_agent_runner.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/system_tools.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/telemetry_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/tool_output_contract.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/tool_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/user_feedback_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/user_session_context_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/visual_kb_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/visual_tool_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/warmup_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/web_search/__init__.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/web_search_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/services/wiki_page_index_service.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/images/favicon.ico +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/images/favicon.png +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/images/fernando.jpeg +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/js/chat_filepond.js +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/js/chat_header_navigation.js +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/js/chat_help_content.js +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/js/chat_history_button.js +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/js/chat_main.js +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/styles/account.css +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/styles/chat_modal.css +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/styles/chat_public.css +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/styles/documents.css +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/styles/landing_page.css +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/styles/llm_output.css +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/styles/onboarding.css +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/static/styles/wiki_page.css +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/_chat_header.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/_company_header.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/_login_widget.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/account.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/base.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/change_password.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/chat.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/chat_modals.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/error.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/forgot_password.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/home_hosted_default.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/login_global.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/onboarding_shell.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/pdf/base.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/pdf/letter.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/pdf/report.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/pdf/simple.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/signup.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/templates/wiki_page.html +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/__init__.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/account_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/api_key_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/base_login_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/categories_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/change_password_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/chat_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/configuration_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/connectors_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/embedding_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/forgot_password_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/help_content_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/history_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/home_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/init_context_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/llmquery_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/load_document_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/login_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/logout_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/memory_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/profile_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/prompt_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/rag_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/root_redirect_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/signup_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/static_page_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/tool_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/users_api_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/verify_user_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/views/wiki_page_view.py +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit.egg-info/requires.txt +0 -0
- {iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit.egg-info/top_level.txt +0 -0
|
@@ -54,7 +54,13 @@ class HistoryCompactionService:
|
|
|
54
54
|
#: Tool outputs and long answers are cut in the transcript the agent reads:
|
|
55
55
|
#: the summary keeps facts, and a 200-row result would crowd out the rest.
|
|
56
56
|
MAX_MESSAGE_CHARS = 4000
|
|
57
|
+
#: What one call to the agent reads. A longer stretch is summarized in
|
|
58
|
+
#: parts, oldest first, each part extending the summary of the previous one.
|
|
57
59
|
MAX_TRANSCRIPT_CHARS = 400_000
|
|
60
|
+
#: Parts per compaction: in the background, enough for a history that grew
|
|
61
|
+
#: without compaction (before BL-009) without summarizing forever; in line,
|
|
62
|
+
#: one, because the person is waiting.
|
|
63
|
+
MAX_CHUNKS = 6
|
|
58
64
|
|
|
59
65
|
@inject
|
|
60
66
|
def __init__(self,
|
|
@@ -73,7 +79,19 @@ class HistoryCompactionService:
|
|
|
73
79
|
# Entry point
|
|
74
80
|
# ------------------------------------------------------------------
|
|
75
81
|
|
|
76
|
-
def compact(self, company_short_name: str, user_identifier: str, model: str
|
|
82
|
+
def compact(self, company_short_name: str, user_identifier: str, model: str,
|
|
83
|
+
max_chunks: Optional[int] = None) -> dict:
|
|
84
|
+
result = self._compact(company_short_name, user_identifier, model, max_chunks)
|
|
85
|
+
if result.get("status") != "compacted":
|
|
86
|
+
# A run that ends without applying anything is as worth knowing as
|
|
87
|
+
# one that does: in production both looked the same ("executed").
|
|
88
|
+
log = logging.warning if result.get("status") == "error" else logging.info
|
|
89
|
+
log("History of %s/%s (model=%s) not compacted: %s",
|
|
90
|
+
company_short_name, user_identifier, model, result)
|
|
91
|
+
return result
|
|
92
|
+
|
|
93
|
+
def _compact(self, company_short_name: str, user_identifier: str, model: str,
|
|
94
|
+
max_chunks: Optional[int]) -> dict:
|
|
77
95
|
history = self.session_context.get_context_history(company_short_name, user_identifier, model=model) or []
|
|
78
96
|
budget = self.history_manager.context_budget_tokens(company_short_name, model)
|
|
79
97
|
plan = self.plan(history, budget)
|
|
@@ -86,24 +104,68 @@ class HistoryCompactionService:
|
|
|
86
104
|
if not company:
|
|
87
105
|
return {"status": "error", "reason": "company_not_found"}
|
|
88
106
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
user_identifier
|
|
107
|
+
chunks = self.chunk_material(plan.material)
|
|
108
|
+
limit = max(int(max_chunks or self.MAX_CHUNKS), 1)
|
|
109
|
+
dropped_chunks = max(len(chunks) - limit, 0)
|
|
110
|
+
if dropped_chunks:
|
|
111
|
+
# The oldest parts go unsummarized: a cost bound, logged so a short
|
|
112
|
+
# summary of a very long conversation can be explained.
|
|
113
|
+
logging.warning(
|
|
114
|
+
"History of %s/%s (model=%s) needs %s parts to summarize; only the %s most recent are.",
|
|
115
|
+
company_short_name, user_identifier, model, len(chunks), limit,
|
|
98
116
|
)
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
117
|
+
chunks = chunks[-limit:]
|
|
118
|
+
|
|
119
|
+
summary = plan.previous_summary
|
|
120
|
+
for chunk in chunks:
|
|
121
|
+
try:
|
|
122
|
+
response = self.system_agent_runner.run(
|
|
123
|
+
company,
|
|
124
|
+
self.AGENT_KEY,
|
|
125
|
+
{"previous_summary": summary, "transcript": self.render_transcript(chunk)},
|
|
126
|
+
user_identifier=user_identifier,
|
|
127
|
+
)
|
|
128
|
+
except SystemAgentUnavailable as e:
|
|
129
|
+
return {"status": "skipped", "reason": str(e)}
|
|
130
|
+
part = self._summary_from(response)
|
|
131
|
+
if not part:
|
|
132
|
+
return {"status": "error", "reason": "empty_summary"}
|
|
133
|
+
summary = part
|
|
134
|
+
|
|
135
|
+
result = self._apply(company_short_name, user_identifier, model, plan, summary)
|
|
136
|
+
if result.get("status") == "compacted":
|
|
137
|
+
result["chunks"] = len(chunks)
|
|
138
|
+
if dropped_chunks:
|
|
139
|
+
result["dropped_chunks"] = dropped_chunks
|
|
140
|
+
return result
|
|
105
141
|
|
|
106
|
-
|
|
142
|
+
@classmethod
|
|
143
|
+
def chunk_material(cls, material: list) -> list[list]:
|
|
144
|
+
"""The material split into parts the agent can read in one call, at turn boundaries.
|
|
145
|
+
|
|
146
|
+
A turn is never split, so a tool call stays with its result. A single
|
|
147
|
+
turn longer than a part is a part of its own (render_transcript clips it).
|
|
148
|
+
"""
|
|
149
|
+
turns: list[list] = []
|
|
150
|
+
for message in material or []:
|
|
151
|
+
if (isinstance(message, dict) and message.get("role") == "user") or not turns:
|
|
152
|
+
turns.append([message])
|
|
153
|
+
else:
|
|
154
|
+
turns[-1].append(message)
|
|
155
|
+
|
|
156
|
+
chunks: list[list] = []
|
|
157
|
+
current: list = []
|
|
158
|
+
current_chars = 0
|
|
159
|
+
for turn in turns:
|
|
160
|
+
turn_chars = len(cls.render_transcript(turn))
|
|
161
|
+
if current and current_chars + turn_chars > cls.MAX_TRANSCRIPT_CHARS:
|
|
162
|
+
chunks.append(current)
|
|
163
|
+
current, current_chars = [], 0
|
|
164
|
+
current.extend(turn)
|
|
165
|
+
current_chars += turn_chars
|
|
166
|
+
if current:
|
|
167
|
+
chunks.append(current)
|
|
168
|
+
return chunks
|
|
107
169
|
|
|
108
170
|
# ------------------------------------------------------------------
|
|
109
171
|
# Planning
|
|
@@ -253,11 +315,27 @@ class HistoryCompactionService:
|
|
|
253
315
|
|
|
254
316
|
@staticmethod
|
|
255
317
|
def _summary_from(response: Any) -> str:
|
|
318
|
+
"""The summary, however the model returned it.
|
|
319
|
+
|
|
320
|
+
The agent asks for `{"summary": ...}`, but over a long transcript a model
|
|
321
|
+
may answer the Markdown alone. That is still the summary; dropping it
|
|
322
|
+
threw away minutes of work and left the history to grow.
|
|
323
|
+
"""
|
|
256
324
|
if not isinstance(response, dict):
|
|
257
325
|
return ""
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
326
|
+
for key in ("structured_output", "parsed_output"):
|
|
327
|
+
structured = response.get(key)
|
|
328
|
+
if isinstance(structured, dict) and isinstance(structured.get("summary"), str):
|
|
329
|
+
return structured["summary"].strip()
|
|
330
|
+
answer = response.get("answer")
|
|
331
|
+
if isinstance(answer, str) and answer.strip():
|
|
332
|
+
text = answer.strip()
|
|
333
|
+
try:
|
|
334
|
+
parsed = json.loads(text)
|
|
335
|
+
except (TypeError, ValueError):
|
|
336
|
+
return text
|
|
337
|
+
if isinstance(parsed, dict) and isinstance(parsed.get("summary"), str):
|
|
338
|
+
return parsed["summary"].strip()
|
|
261
339
|
return ""
|
|
262
340
|
|
|
263
341
|
def _count(self, message: Any) -> int:
|
|
@@ -39,15 +39,29 @@ class HistoryManagerService:
|
|
|
39
39
|
#: declare 128k of output; reserving all of it would waste a quarter of a
|
|
40
40
|
#: 400k window on an answer that is almost never that long.
|
|
41
41
|
MAX_OUTPUT_RESERVE_TOKENS = 32000
|
|
42
|
+
#: The most the history may take, whatever the model's window. Every turn
|
|
43
|
+
#: (and every round of its tool loop) sends the whole history, so a
|
|
44
|
+
#: million-token window filled on each call is a cost nobody chose: seen in
|
|
45
|
+
#: production, three calls of 393k tokens for one question. A company may
|
|
46
|
+
#: set its own with `llm.max_context_tokens`.
|
|
47
|
+
DEFAULT_MAX_CONTEXT_TOKENS = 200000
|
|
42
48
|
|
|
43
49
|
#: Share of the budget at which a finished turn asks for a background
|
|
44
50
|
#: compaction, and at which the next turn compacts in line because the
|
|
45
51
|
#: background one did not land in time (BL-009, Fase E).
|
|
46
52
|
COMPACTION_TRIGGER_SHARE = 0.70
|
|
47
53
|
INLINE_COMPACTION_SHARE = 0.95
|
|
54
|
+
#: Parts an in-line compaction may summarize: one, the person is waiting.
|
|
55
|
+
INLINE_COMPACTION_MAX_CHUNKS = 1
|
|
48
56
|
#: How long a turn waits for a compaction that is writing the history.
|
|
49
57
|
HISTORY_LOCK_WAIT_SECONDS = 2.0
|
|
50
58
|
HISTORY_LOCK_TTL_SECONDS = 30
|
|
59
|
+
#: The stored history never grows past this many budgets. Only the copy sent
|
|
60
|
+
#: to the model used to be trimmed, so a conversation that was never
|
|
61
|
+
#: compacted kept every turn in the session (829k tokens seen on a 400k
|
|
62
|
+
#: budget). Two budgets leave the background compaction room to summarize
|
|
63
|
+
#: what is over one; past them, the oldest turns go.
|
|
64
|
+
STORED_HISTORY_MAX_BUDGETS = 2
|
|
51
65
|
|
|
52
66
|
#: Marks the message that holds the summary of the compacted turns. It goes
|
|
53
67
|
#: to the model as it is, so it also tells the model what the text is.
|
|
@@ -187,6 +201,8 @@ class HistoryManagerService:
|
|
|
187
201
|
elif response.get('answer'):
|
|
188
202
|
context_history.append({"role": "assistant", "content": response.get('answer', '')})
|
|
189
203
|
|
|
204
|
+
self._cap_stored_history(company_short_name, model, context_history)
|
|
205
|
+
|
|
190
206
|
self.session_context.save_context_history(
|
|
191
207
|
company_short_name,
|
|
192
208
|
user_identifier,
|
|
@@ -215,7 +231,14 @@ class HistoryManagerService:
|
|
|
215
231
|
|
|
216
232
|
def _compact_in_line_if_needed(self, company_short_name: str, user_identifier: str, model: Optional[str],
|
|
217
233
|
user_turn_prompt: str, budget: int):
|
|
218
|
-
"""
|
|
234
|
+
"""Handles a turn that would not fit because the background compaction did not land in time.
|
|
235
|
+
|
|
236
|
+
With workers, the turn asks for the compaction again and goes out
|
|
237
|
+
trimmed: a summary takes one to three minutes (seen in production), and
|
|
238
|
+
the request would die long before (gunicorn's timeout is 60s). Only an
|
|
239
|
+
installation without workers compacts in line, since nothing else ever
|
|
240
|
+
would.
|
|
241
|
+
"""
|
|
219
242
|
try:
|
|
220
243
|
measured = self.session_context.get_context_tokens(company_short_name, user_identifier, model=model)
|
|
221
244
|
if not measured:
|
|
@@ -223,7 +246,12 @@ class HistoryManagerService:
|
|
|
223
246
|
estimated = measured + self.llm_client.count_tokens(user_turn_prompt or "")
|
|
224
247
|
if estimated < budget * self.INLINE_COMPACTION_SHARE:
|
|
225
248
|
return
|
|
226
|
-
|
|
249
|
+
if self.compaction_trigger.trigger(company_short_name, user_identifier, model):
|
|
250
|
+
return
|
|
251
|
+
result = self.compaction_service.compact(
|
|
252
|
+
company_short_name, user_identifier, model,
|
|
253
|
+
max_chunks=self.INLINE_COMPACTION_MAX_CHUNKS,
|
|
254
|
+
)
|
|
227
255
|
logging.info(f"In-line compaction of {company_short_name}/{user_identifier}: {result}")
|
|
228
256
|
except Exception as e:
|
|
229
257
|
# The trim that follows still keeps the request inside the window.
|
|
@@ -282,13 +310,12 @@ class HistoryManagerService:
|
|
|
282
310
|
else:
|
|
283
311
|
budget = self.DEFAULT_CONTEXT_BUDGET_TOKENS
|
|
284
312
|
|
|
285
|
-
#
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
return min(budget, company_cap) if company_cap else budget
|
|
313
|
+
# The window is a ceiling, not a target: the cap is a cost decision.
|
|
314
|
+
cap = self._company_context_cap(company_short_name) or self.DEFAULT_MAX_CONTEXT_TOKENS
|
|
315
|
+
return min(budget, cap)
|
|
289
316
|
|
|
290
317
|
def _company_context_cap(self, company_short_name: str) -> int:
|
|
291
|
-
"""`llm.max_context_tokens` in company.yaml; 0 when not set."""
|
|
318
|
+
"""`llm.max_context_tokens` in company.yaml; 0 when not set (the platform default applies)."""
|
|
292
319
|
if self.configuration_service is None:
|
|
293
320
|
return 0
|
|
294
321
|
try:
|
|
@@ -322,7 +349,17 @@ class HistoryManagerService:
|
|
|
322
349
|
and not cls.is_summary_message(message)
|
|
323
350
|
]
|
|
324
351
|
|
|
325
|
-
def
|
|
352
|
+
def _cap_stored_history(self, company_short_name: str, model: Optional[str], context_history: list):
|
|
353
|
+
"""Keeps the stored history under STORED_HISTORY_MAX_BUDGETS budgets, whole turns at a time."""
|
|
354
|
+
cap = self.context_budget_tokens(company_short_name, model) * self.STORED_HISTORY_MAX_BUDGETS
|
|
355
|
+
# A cheap upper estimate first (a token is rarely under 3 characters):
|
|
356
|
+
# counting every save with the tokenizer would cost what this saves.
|
|
357
|
+
if len(json.dumps(context_history, default=str)) <= cap * 3:
|
|
358
|
+
return
|
|
359
|
+
self._trim_context_history(context_history, cap, purpose="stored")
|
|
360
|
+
|
|
361
|
+
def _trim_context_history(self, context_history: list, budget_tokens: Optional[int] = None,
|
|
362
|
+
purpose: str = "request"):
|
|
326
363
|
"""Drops whole turns, oldest first, until the history fits the budget.
|
|
327
364
|
|
|
328
365
|
A turn is a user message and everything up to the next one: the
|
|
@@ -341,6 +378,9 @@ class HistoryManagerService:
|
|
|
341
378
|
return
|
|
342
379
|
|
|
343
380
|
total_tokens = sum(token_counts)
|
|
381
|
+
initial_tokens = total_tokens
|
|
382
|
+
removed_turns = 0
|
|
383
|
+
removed_messages = 0
|
|
344
384
|
while total_tokens > budget:
|
|
345
385
|
turn_starts = self.turn_starts(context_history)
|
|
346
386
|
if len(turn_starts) < 2:
|
|
@@ -350,9 +390,13 @@ class HistoryManagerService:
|
|
|
350
390
|
del context_history[first:second]
|
|
351
391
|
del token_counts[first:second]
|
|
352
392
|
total_tokens -= removed_tokens
|
|
393
|
+
removed_turns += 1
|
|
394
|
+
removed_messages += second - first
|
|
395
|
+
|
|
396
|
+
if removed_turns:
|
|
353
397
|
logging.warning(
|
|
354
|
-
f"History
|
|
355
|
-
f"({
|
|
398
|
+
f"History ({purpose}) over the budget of {budget} tokens: removed the {removed_turns} "
|
|
399
|
+
f"oldest turns ({removed_messages} messages), {initial_tokens} -> {total_tokens} tokens."
|
|
356
400
|
)
|
|
357
401
|
|
|
358
402
|
# --- this is for the history popup in the chat page
|
|
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.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/interfaces/history_compaction_trigger.py
RENAMED
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/common/interfaces/signup_policy_resolver.py
RENAMED
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/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.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_agents/history_compaction.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_agents/memory_compiler.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_agents/memory_correction.prompt
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/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.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/core_identity.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/email_output.prompt
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/format_styles.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/html_structures.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/links_documents.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/memory_usage.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/output_basics.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/sql_casting.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/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
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/connectors/file_connector_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/src/iatoolkit/infra/connectors/google_drive_connector.py
RENAMED
|
File without changes
|
{iatoolkit-2.74.1 → iatoolkit-2.74.2}/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.74.1 → iatoolkit-2.74.2}/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.74.1 → iatoolkit-2.74.2}/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.74.1 → iatoolkit-2.74.2}/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
|