unique_toolkit 2026.44.0.dev3__tar.gz → 2026.44.0.dev5__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.
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/PKG-INFO +2 -2
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/pyproject.toml +2 -2
- unique_toolkit-2026.44.0.dev5/unique_toolkit/agentic/history_manager/context_overflow.py +264 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/history_manager/history_manager.py +73 -1
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +23 -3
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/__init__.py +4 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/functions.py +11 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/schemas.py +17 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/service.py +13 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/functions.py +35 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/infos.py +45 -0
- unique_toolkit-2026.44.0.dev5/unique_toolkit/language_model/provider_token_count.py +170 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/protocols/support.py +14 -1
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/services/chat_service.py +33 -1
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/services/knowledge_base.py +21 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/README.md +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/metadata_filter_scope.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/tests/test_hallucination_external_context.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/history_manager/settings.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/helpers.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/runner.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/message_log_order.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/reference_manager/tests/test_external_context.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/ask_user_tool/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/ask_user_tool/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/ask_user_tool/tool.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/names.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_container.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_files.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_memory.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/builder.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/office_preview.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/run_context.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/agentic_table/synthetic_chat_event.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/feature_flags.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/find_env_file.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/deprecated/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/README.md +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/_internal/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/_base.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/content_tree/functions.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/base/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/identity/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_model_params.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/feature_flags/README.md +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/feature_flags/_graphql_client.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/feature_flags/_ttl_cache.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/feature_flags/client.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/feature_flags/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/feature_flags/settings.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/group/functions.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/group/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/user/functions.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/resources/user/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/experimental/testing/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/invocation_stats.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/model_costs.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/settings.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/monitoring/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/monitoring/gunicorn.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/monitoring/memory.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/monitoring/middleware.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/monitoring/registry.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/monitoring/tracing.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/services/factory.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/test_utilities/events.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: unique-toolkit
|
|
3
|
-
Version: 2026.44.0.
|
|
3
|
+
Version: 2026.44.0.dev5
|
|
4
4
|
Summary:
|
|
5
5
|
Author: Cedric Klinkert, Martin Fadler, Sadique Sheik, Fabian Schläpfer, Pascal Hauri, Ejiroghene Oki-Peter, Rami Azouz, Ricardo Visini, Sanzio Monti
|
|
6
6
|
Author-email: Cedric Klinkert <cedric.klinkert@unique.ch>, Martin Fadler <martin.fadler@unique.ch>, Sadique Sheik <sadique@unique.ch>, Fabian Schläpfer <fabian@unique.ch>, Pascal Hauri <pascal@unique.ch>, Ejiroghene Oki-Peter <oki-peter.ejiroghene@unique.ai>, Rami Azouz <rami.ext@unique.ch>, Ricardo Visini <ricardo.visini@unique.ch>, Sanzio Monti <sanzio.monti@unique.ai>
|
|
@@ -16,7 +16,7 @@ Requires-Dist: sseclient>=0.0.27,<0.0.28
|
|
|
16
16
|
Requires-Dist: openai>=1.105.0,<3
|
|
17
17
|
Requires-Dist: platformdirs>=4.0.0,<5
|
|
18
18
|
Requires-Dist: pillow>=12.1.1
|
|
19
|
-
Requires-Dist: unique-sdk>=2026.44.0.
|
|
19
|
+
Requires-Dist: unique-sdk>=2026.44.0.dev8,<2026.44.0rc0
|
|
20
20
|
Requires-Dist: jambo>=0.1.2,<0.2
|
|
21
21
|
Requires-Dist: jinja2>=3.1.6,<4
|
|
22
22
|
Requires-Dist: docxtpl>=0.20.1,<0.21
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "unique_toolkit"
|
|
3
|
-
version = "2026.44.0.
|
|
3
|
+
version = "2026.44.0.dev5"
|
|
4
4
|
description = ""
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -28,7 +28,7 @@ dependencies = [
|
|
|
28
28
|
"openai>=1.105.0,<3",
|
|
29
29
|
"platformdirs>=4.0.0,<5",
|
|
30
30
|
"pillow>=12.1.1",
|
|
31
|
-
"unique-sdk>=2026.44.0.
|
|
31
|
+
"unique-sdk>=2026.44.0.dev8,<2026.44.0rc0",
|
|
32
32
|
"jambo>=0.1.2,<0.2",
|
|
33
33
|
"jinja2>=3.1.6,<4",
|
|
34
34
|
"docxtpl>=0.20.1,<0.21",
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
"""Keep agent-loop prompts inside the provider's context window.
|
|
2
|
+
|
|
3
|
+
The local reducer estimates tokens with an OpenAI tokenizer, which can undercount
|
|
4
|
+
other providers by 2x or more. ``ContextOverflowGuard`` verifies near-limit
|
|
5
|
+
payloads with the provider's own counter before the LLM call and recovers when the
|
|
6
|
+
provider still rejects a prompt as too long.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import asyncio
|
|
12
|
+
import time
|
|
13
|
+
from collections.abc import Awaitable, Callable
|
|
14
|
+
from logging import Logger
|
|
15
|
+
from typing import Any, TypeVar
|
|
16
|
+
|
|
17
|
+
from unique_toolkit.agentic.history_manager.history_manager import HistoryManager
|
|
18
|
+
from unique_toolkit.agentic.loop_runner.base import _LoopIterationRunnerKwargs
|
|
19
|
+
from unique_toolkit.language_model.infos import LanguageModelInfo
|
|
20
|
+
from unique_toolkit.language_model.settings import ModelFamily
|
|
21
|
+
from unique_toolkit.protocols.support import SupportsTokenCount
|
|
22
|
+
|
|
23
|
+
_T = TypeVar("_T")
|
|
24
|
+
|
|
25
|
+
_CONTEXT_OVERFLOW_SIGNALS = (
|
|
26
|
+
"context_length_exceeded",
|
|
27
|
+
"contextwindowexceedederror",
|
|
28
|
+
"tokenlimitexceeded",
|
|
29
|
+
"maximum context length",
|
|
30
|
+
"prompt is too long",
|
|
31
|
+
"input is too long",
|
|
32
|
+
"too many input tokens",
|
|
33
|
+
"exceeds the maximum number of tokens",
|
|
34
|
+
)
|
|
35
|
+
_CONTEXT_WINDOW_QUALIFIERS = ("exceed", "too long", "maximum")
|
|
36
|
+
|
|
37
|
+
CONTEXT_OVERFLOW_TOKEN_BUDGET_FACTOR = 0.7
|
|
38
|
+
PROVIDER_COUNT_TARGET_RATIO = 0.95
|
|
39
|
+
MAX_PROVIDER_OVERFLOW_REDUCTION_FACTOR = 0.9
|
|
40
|
+
APPROXIMATE_TOKENIZER_TRIGGER_RATIO = 0.7
|
|
41
|
+
NATIVE_TOKENIZER_TRIGGER_RATIO = 0.85
|
|
42
|
+
LOCAL_LIMIT_TRIGGER_RATIO = 0.95
|
|
43
|
+
DEFAULT_OUTPUT_TOKEN_RESERVE = 10_000
|
|
44
|
+
PROVIDER_TOKEN_COUNT_TIMEOUT_SECONDS = 10
|
|
45
|
+
|
|
46
|
+
_NATIVE_TOKENIZER_FAMILIES = {
|
|
47
|
+
ModelFamily.OPENAI,
|
|
48
|
+
ModelFamily.DEEPSEEK,
|
|
49
|
+
ModelFamily.QWEN,
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
WITHHELD_TOOL_RESULT_NOTICE = (
|
|
53
|
+
"The combined output of the tool calls made in this step was too large for "
|
|
54
|
+
"the model's context window, so this result was withheld. Do not repeat "
|
|
55
|
+
"these tool calls in parallel. Call them one at a time instead, and narrow "
|
|
56
|
+
"each call (for example a lower result limit, a shorter date range or a "
|
|
57
|
+
"more specific query) so that each result stays small."
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def is_context_window_exceeded_error(exc: BaseException) -> bool:
|
|
62
|
+
"""Return True if *exc* indicates the prompt exceeded the model's context window."""
|
|
63
|
+
error_text = f"{type(exc).__name__} {exc}".lower()
|
|
64
|
+
if any(signal in error_text for signal in _CONTEXT_OVERFLOW_SIGNALS):
|
|
65
|
+
return True
|
|
66
|
+
return "context window" in error_text and any(
|
|
67
|
+
qualifier in error_text for qualifier in _CONTEXT_WINDOW_QUALIFIERS
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def supports_provider_token_count(model: LanguageModelInfo) -> bool:
|
|
72
|
+
return model.family == ModelFamily.ANTHROPIC
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def provider_context_window(model: LanguageModelInfo) -> int:
|
|
76
|
+
return model.provider_context_window
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def provider_count_trigger_tokens(
|
|
80
|
+
model: LanguageModelInfo,
|
|
81
|
+
effective_local_limit: int,
|
|
82
|
+
) -> int:
|
|
83
|
+
"""Local count at which an authoritative provider count becomes worthwhile."""
|
|
84
|
+
ratio = (
|
|
85
|
+
NATIVE_TOKENIZER_TRIGGER_RATIO
|
|
86
|
+
if model.family in _NATIVE_TOKENIZER_FAMILIES
|
|
87
|
+
else APPROXIMATE_TOKENIZER_TRIGGER_RATIO
|
|
88
|
+
)
|
|
89
|
+
return min(
|
|
90
|
+
int(provider_context_window(model) * ratio),
|
|
91
|
+
int(effective_local_limit * LOCAL_LIMIT_TRIGGER_RATIO),
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def provider_input_target(
|
|
96
|
+
model: LanguageModelInfo,
|
|
97
|
+
other_options: dict[str, Any] | None,
|
|
98
|
+
) -> int:
|
|
99
|
+
"""Maximum provider-counted input while preserving output and safety room."""
|
|
100
|
+
options = other_options or {}
|
|
101
|
+
configured_output = options.get("max_completion_tokens", options.get("max_tokens"))
|
|
102
|
+
output_reserve = (
|
|
103
|
+
configured_output
|
|
104
|
+
if isinstance(configured_output, int) and configured_output >= 0
|
|
105
|
+
else min(
|
|
106
|
+
DEFAULT_OUTPUT_TOKEN_RESERVE,
|
|
107
|
+
model.token_limits.token_limit_output,
|
|
108
|
+
)
|
|
109
|
+
)
|
|
110
|
+
return max(
|
|
111
|
+
1,
|
|
112
|
+
int(provider_context_window(model) * PROVIDER_COUNT_TARGET_RATIO)
|
|
113
|
+
- output_reserve,
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def provider_overflow_reduction_factor(provider_count: int, target: int) -> float:
|
|
118
|
+
"""Budget multiplier that brings an oversized provider count under *target*."""
|
|
119
|
+
return min(
|
|
120
|
+
MAX_PROVIDER_OVERFLOW_REDUCTION_FACTOR,
|
|
121
|
+
target / provider_count * PROVIDER_COUNT_TARGET_RATIO,
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
class ContextOverflowGuard:
|
|
126
|
+
"""Preflight provider token-budget verification and overflow retry policy."""
|
|
127
|
+
|
|
128
|
+
def __init__(
|
|
129
|
+
self,
|
|
130
|
+
*,
|
|
131
|
+
logger: Logger,
|
|
132
|
+
history_manager: HistoryManager,
|
|
133
|
+
token_counter: object,
|
|
134
|
+
model: LanguageModelInfo,
|
|
135
|
+
) -> None:
|
|
136
|
+
self._logger = logger
|
|
137
|
+
self._history_manager = history_manager
|
|
138
|
+
self._token_counter = token_counter
|
|
139
|
+
self._model = model
|
|
140
|
+
|
|
141
|
+
async def preflight_token_budget(
|
|
142
|
+
self,
|
|
143
|
+
kwargs: _LoopIterationRunnerKwargs,
|
|
144
|
+
recompose: Callable[[], Awaitable[None]],
|
|
145
|
+
) -> None:
|
|
146
|
+
"""Verify near-limit payloads using the provider's tokenizer before the LLM call."""
|
|
147
|
+
if not supports_provider_token_count(self._model):
|
|
148
|
+
return
|
|
149
|
+
if not isinstance(self._token_counter, SupportsTokenCount):
|
|
150
|
+
return
|
|
151
|
+
|
|
152
|
+
local_count = self._history_manager.last_token_count
|
|
153
|
+
effective_limit = self._history_manager.effective_token_limit
|
|
154
|
+
trigger = provider_count_trigger_tokens(self._model, effective_limit)
|
|
155
|
+
if local_count < trigger:
|
|
156
|
+
return
|
|
157
|
+
|
|
158
|
+
target = provider_input_target(self._model, kwargs.get("other_options"))
|
|
159
|
+
provider_count = await self._try_provider_token_count(kwargs)
|
|
160
|
+
if provider_count is None or provider_count <= target:
|
|
161
|
+
return
|
|
162
|
+
|
|
163
|
+
self._logger.warning(
|
|
164
|
+
f"Provider token count {provider_count} exceeds the safe input target "
|
|
165
|
+
f"{target}. Reducing tool results before the LLM call."
|
|
166
|
+
)
|
|
167
|
+
reduction_factor = provider_overflow_reduction_factor(provider_count, target)
|
|
168
|
+
self._history_manager.tighten_token_budget(reduction_factor)
|
|
169
|
+
await recompose()
|
|
170
|
+
|
|
171
|
+
reduced_count = await self._try_provider_token_count(kwargs)
|
|
172
|
+
if reduced_count is None or reduced_count <= target:
|
|
173
|
+
return
|
|
174
|
+
|
|
175
|
+
if not self._history_manager.withhold_latest_tool_call_results(
|
|
176
|
+
WITHHELD_TOOL_RESULT_NOTICE
|
|
177
|
+
):
|
|
178
|
+
self._logger.warning(
|
|
179
|
+
f"Provider token count remains above target ({reduced_count} > "
|
|
180
|
+
f"{target}), but there are no tool results to withhold."
|
|
181
|
+
)
|
|
182
|
+
return
|
|
183
|
+
|
|
184
|
+
self._logger.warning(
|
|
185
|
+
"Provider token count remains above target after reduction. "
|
|
186
|
+
"Withholding the latest tool-call batch."
|
|
187
|
+
)
|
|
188
|
+
await recompose()
|
|
189
|
+
|
|
190
|
+
withheld_count = await self._try_provider_token_count(kwargs)
|
|
191
|
+
if withheld_count is None or withheld_count <= target:
|
|
192
|
+
return
|
|
193
|
+
|
|
194
|
+
self._logger.warning(
|
|
195
|
+
f"Provider token count {withheld_count} still exceeds the safe input "
|
|
196
|
+
f"target {target} after withholding. Reducing history further."
|
|
197
|
+
)
|
|
198
|
+
self._history_manager.tighten_token_budget(
|
|
199
|
+
provider_overflow_reduction_factor(withheld_count, target)
|
|
200
|
+
)
|
|
201
|
+
await recompose()
|
|
202
|
+
|
|
203
|
+
async def retry_after_overflow(
|
|
204
|
+
self,
|
|
205
|
+
exc: Exception,
|
|
206
|
+
*,
|
|
207
|
+
recompose: Callable[[], Awaitable[None]],
|
|
208
|
+
run_iteration: Callable[[], Awaitable[_T]],
|
|
209
|
+
) -> _T:
|
|
210
|
+
"""Retry an oversized LLM call by tightening the budget or withholding the latest tool batch."""
|
|
211
|
+
self._logger.warning(
|
|
212
|
+
"LLM call exceeded the context window. Retrying with a tighter token budget.",
|
|
213
|
+
exc_info=exc,
|
|
214
|
+
)
|
|
215
|
+
self._history_manager.tighten_token_budget(CONTEXT_OVERFLOW_TOKEN_BUDGET_FACTOR)
|
|
216
|
+
await recompose()
|
|
217
|
+
try:
|
|
218
|
+
return await run_iteration()
|
|
219
|
+
except Exception as retry_exc:
|
|
220
|
+
if not is_context_window_exceeded_error(retry_exc):
|
|
221
|
+
raise
|
|
222
|
+
if not self._history_manager.withhold_latest_tool_call_results(
|
|
223
|
+
WITHHELD_TOOL_RESULT_NOTICE
|
|
224
|
+
):
|
|
225
|
+
raise
|
|
226
|
+
self._logger.warning(
|
|
227
|
+
"LLM call still exceeded the context window. Retrying with the "
|
|
228
|
+
"latest tool call results withheld."
|
|
229
|
+
)
|
|
230
|
+
await recompose()
|
|
231
|
+
return await run_iteration()
|
|
232
|
+
|
|
233
|
+
async def _try_provider_token_count(
|
|
234
|
+
self, kwargs: _LoopIterationRunnerKwargs
|
|
235
|
+
) -> int | None:
|
|
236
|
+
counter = self._token_counter
|
|
237
|
+
if not isinstance(counter, SupportsTokenCount):
|
|
238
|
+
return None
|
|
239
|
+
started_at = time.perf_counter()
|
|
240
|
+
try:
|
|
241
|
+
count = await asyncio.wait_for(
|
|
242
|
+
counter.count_tokens_async(
|
|
243
|
+
messages=kwargs["messages"],
|
|
244
|
+
model_name=self._model.name,
|
|
245
|
+
temperature=kwargs.get("temperature", 0.0),
|
|
246
|
+
tools=kwargs.get("tools"),
|
|
247
|
+
other_options=kwargs.get("other_options"),
|
|
248
|
+
),
|
|
249
|
+
timeout=PROVIDER_TOKEN_COUNT_TIMEOUT_SECONDS,
|
|
250
|
+
)
|
|
251
|
+
except Exception:
|
|
252
|
+
elapsed_ms = (time.perf_counter() - started_at) * 1000
|
|
253
|
+
self._logger.warning(
|
|
254
|
+
f"Provider token counting failed after {elapsed_ms:.0f} ms. "
|
|
255
|
+
"Continuing with the local token budget.",
|
|
256
|
+
exc_info=True,
|
|
257
|
+
)
|
|
258
|
+
return None
|
|
259
|
+
elapsed_ms = (time.perf_counter() - started_at) * 1000
|
|
260
|
+
self._logger.info(
|
|
261
|
+
f"Provider token count for {self._model.name}: {count} tokens "
|
|
262
|
+
f"in {elapsed_ms:.0f} ms."
|
|
263
|
+
)
|
|
264
|
+
return count if count > 0 else None
|
|
@@ -152,6 +152,7 @@ class HistoryManager:
|
|
|
152
152
|
return len(self._loop_history) == 0
|
|
153
153
|
|
|
154
154
|
def add_tool_call_results(self, tool_call_results: list[ToolCallResponse]):
|
|
155
|
+
self._collected_tool_response_image_urls = []
|
|
155
156
|
for tool_response in tool_call_results:
|
|
156
157
|
if tool_response.image_data_urls:
|
|
157
158
|
for url in tool_response.image_data_urls:
|
|
@@ -220,6 +221,78 @@ class HistoryManager:
|
|
|
220
221
|
def add_assistant_message(self, message: LanguageModelAssistantMessage) -> None:
|
|
221
222
|
self._loop_history.append(message)
|
|
222
223
|
|
|
224
|
+
def tighten_token_budget(self, factor: float) -> None:
|
|
225
|
+
self._token_reducer.tighten_effective_token_limit(factor)
|
|
226
|
+
|
|
227
|
+
@property
|
|
228
|
+
def effective_token_limit(self) -> int:
|
|
229
|
+
return self._token_reducer.effective_token_limit
|
|
230
|
+
|
|
231
|
+
@property
|
|
232
|
+
def last_token_count(self) -> int:
|
|
233
|
+
return self._token_reducer.last_token_count
|
|
234
|
+
|
|
235
|
+
def withhold_latest_tool_call_results(self, notice: str) -> int:
|
|
236
|
+
"""Replace every result of the most recent tool-call batch with *notice*.
|
|
237
|
+
|
|
238
|
+
The withheld results' chunks are dropped from the reference manager. They
|
|
239
|
+
are the newest chunks, so source numbers of earlier results stay valid.
|
|
240
|
+
Returns the number of withheld results.
|
|
241
|
+
"""
|
|
242
|
+
batch_start: int | None = None
|
|
243
|
+
for index in range(len(self._loop_history) - 1, -1, -1):
|
|
244
|
+
candidate = self._loop_history[index]
|
|
245
|
+
if (
|
|
246
|
+
isinstance(candidate, LanguageModelAssistantMessage)
|
|
247
|
+
and candidate.tool_calls
|
|
248
|
+
):
|
|
249
|
+
batch_start = index
|
|
250
|
+
break
|
|
251
|
+
if batch_start is None:
|
|
252
|
+
return 0
|
|
253
|
+
|
|
254
|
+
withheld_tool_call_ids: list[str] = []
|
|
255
|
+
for index in range(batch_start + 1, len(self._loop_history)):
|
|
256
|
+
message = self._loop_history[index]
|
|
257
|
+
if not isinstance(message, LanguageModelToolMessage):
|
|
258
|
+
continue
|
|
259
|
+
self._loop_history[index] = LanguageModelToolMessage(
|
|
260
|
+
content=notice,
|
|
261
|
+
tool_call_id=message.tool_call_id,
|
|
262
|
+
name=message.name,
|
|
263
|
+
)
|
|
264
|
+
withheld_tool_call_ids.append(message.tool_call_id)
|
|
265
|
+
|
|
266
|
+
withheld_chunks = {
|
|
267
|
+
id(chunk)
|
|
268
|
+
for tool_call_id in withheld_tool_call_ids
|
|
269
|
+
for chunk in self._reference_manager.get_chunks_of_tool(tool_call_id)
|
|
270
|
+
}
|
|
271
|
+
if withheld_chunks:
|
|
272
|
+
self._reference_manager.replace(
|
|
273
|
+
chunks=[
|
|
274
|
+
chunk
|
|
275
|
+
for chunk in self._reference_manager.get_chunks()
|
|
276
|
+
if id(chunk) not in withheld_chunks
|
|
277
|
+
]
|
|
278
|
+
)
|
|
279
|
+
for tool_call_id in withheld_tool_call_ids:
|
|
280
|
+
self._reference_manager.replace_chunks_of_tool(tool_call_id, [])
|
|
281
|
+
|
|
282
|
+
if self._collected_tool_response_image_urls:
|
|
283
|
+
withheld_ids = set(withheld_tool_call_ids)
|
|
284
|
+
self._collected_tool_response_image_urls = [
|
|
285
|
+
(url, tool_call_id)
|
|
286
|
+
for url, tool_call_id in self._collected_tool_response_image_urls
|
|
287
|
+
if tool_call_id not in withheld_ids
|
|
288
|
+
]
|
|
289
|
+
|
|
290
|
+
self._logger.warning(
|
|
291
|
+
f"Withheld {len(withheld_tool_call_ids)} tool call result(s) that "
|
|
292
|
+
"exceeded the context window."
|
|
293
|
+
)
|
|
294
|
+
return len(withheld_tool_call_ids)
|
|
295
|
+
|
|
223
296
|
async def get_history_for_model_call(
|
|
224
297
|
self,
|
|
225
298
|
original_user_message: str,
|
|
@@ -238,7 +311,6 @@ class HistoryManager:
|
|
|
238
311
|
remove_from_text=remove_from_text,
|
|
239
312
|
image_data_urls_from_tools=image_data_from_tools,
|
|
240
313
|
)
|
|
241
|
-
self._collected_tool_response_image_urls = []
|
|
242
314
|
|
|
243
315
|
if not self._source_offset_initialized:
|
|
244
316
|
offset = max(0, self._token_reducer.max_db_source_number + 1)
|
|
@@ -38,7 +38,6 @@ MAX_INPUT_TOKENS_SAFETY_PERCENTAGE = env_settings.input_correction_reduction_fac
|
|
|
38
38
|
SAFETY_MARGIN_FOR_AGGRESSIVE_REDUCTION = env_settings.input_aggressive_reduction_factor
|
|
39
39
|
|
|
40
40
|
PLAIN_TEXT_TRUNCATION_MARKER = "\n\n[... tool response too long and was truncated]"
|
|
41
|
-
# TODO: Make this configurable
|
|
42
41
|
MIN_PLAIN_TEXT_CHARS_TO_KEEP = 1000
|
|
43
42
|
|
|
44
43
|
|
|
@@ -106,6 +105,7 @@ class LoopTokenReducer:
|
|
|
106
105
|
self._language_model.token_limits.token_limit_input
|
|
107
106
|
* (1 - MAX_INPUT_TOKENS_SAFETY_PERCENTAGE)
|
|
108
107
|
)
|
|
108
|
+
self._last_token_count = 0
|
|
109
109
|
self._max_db_source_number: int = -1
|
|
110
110
|
self._db_source_map: dict[int, ContentChunk] = {}
|
|
111
111
|
self._enable_tool_call_persistence = enable_tool_call_persistence
|
|
@@ -131,6 +131,27 @@ class LoopTokenReducer:
|
|
|
131
131
|
def db_source_map(self) -> dict[int, ContentChunk]:
|
|
132
132
|
return self._db_source_map
|
|
133
133
|
|
|
134
|
+
@property
|
|
135
|
+
def effective_token_limit(self) -> int:
|
|
136
|
+
return self._effective_token_limit
|
|
137
|
+
|
|
138
|
+
@property
|
|
139
|
+
def last_token_count(self) -> int:
|
|
140
|
+
return self._last_token_count
|
|
141
|
+
|
|
142
|
+
def tighten_effective_token_limit(self, factor: float) -> None:
|
|
143
|
+
"""Shrink the input-token budget for the rest of the run.
|
|
144
|
+
|
|
145
|
+
Used after the provider rejected a payload this reducer counted as within
|
|
146
|
+
budget, i.e. the encoder underestimates the model's real token count.
|
|
147
|
+
"""
|
|
148
|
+
previous_limit = self._effective_token_limit
|
|
149
|
+
self._effective_token_limit = int(previous_limit * factor)
|
|
150
|
+
self._logger.warning(
|
|
151
|
+
f"Tightened effective token limit from {previous_limit} to "
|
|
152
|
+
f"{self._effective_token_limit} tokens."
|
|
153
|
+
)
|
|
154
|
+
|
|
134
155
|
def _get_encoder(self, language_model: LMI) -> Callable[[str], list[int]]:
|
|
135
156
|
return language_model.get_encoder()
|
|
136
157
|
|
|
@@ -179,6 +200,7 @@ class LoopTokenReducer:
|
|
|
179
200
|
break
|
|
180
201
|
|
|
181
202
|
token_count = self._count_message_tokens(messages)
|
|
203
|
+
self._last_token_count = token_count
|
|
182
204
|
self._logger.info(
|
|
183
205
|
f"Final token count after reduction: {token_count} of model_capacity {self._language_model.token_limits.token_limit_input}"
|
|
184
206
|
)
|
|
@@ -191,8 +213,6 @@ class LoopTokenReducer:
|
|
|
191
213
|
This is purely a size check. Whether anything can actually be reduced to
|
|
192
214
|
get back under the limit is a separate concern (:meth:`_can_reduce_history`).
|
|
193
215
|
"""
|
|
194
|
-
# TODO: This is not fully correct at the moment as the token_count
|
|
195
|
-
# include system_prompt and user question already
|
|
196
216
|
return token_count > self._effective_token_limit
|
|
197
217
|
|
|
198
218
|
def _can_reduce_history(self, loop_history: list[LanguageModelMessage]) -> bool:
|
{unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/__init__.py
RENAMED
|
@@ -16,6 +16,9 @@ from .schemas import (
|
|
|
16
16
|
from .schemas import (
|
|
17
17
|
ContentRerankerConfig as ContentRerankerConfig,
|
|
18
18
|
)
|
|
19
|
+
from .schemas import (
|
|
20
|
+
ContentSearchMergeStrategy as ContentSearchMergeStrategy,
|
|
21
|
+
)
|
|
19
22
|
from .schemas import (
|
|
20
23
|
ContentSearchResult as ContentSearchResult,
|
|
21
24
|
)
|
|
@@ -47,6 +50,7 @@ __all__ = [
|
|
|
47
50
|
"ContentMetadata",
|
|
48
51
|
"ContentReference",
|
|
49
52
|
"ContentRerankerConfig",
|
|
53
|
+
"ContentSearchMergeStrategy",
|
|
50
54
|
"ContentSearchResult",
|
|
51
55
|
"ContentSearchType",
|
|
52
56
|
"ContentService",
|
{unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/functions.py
RENAMED
|
@@ -17,6 +17,7 @@ from unique_toolkit.content.schemas import (
|
|
|
17
17
|
ContentChunk,
|
|
18
18
|
ContentInfo,
|
|
19
19
|
ContentRerankerConfig,
|
|
20
|
+
ContentSearchMergeStrategy,
|
|
20
21
|
ContentSearchType,
|
|
21
22
|
DeleteContentResponse,
|
|
22
23
|
FolderInfo,
|
|
@@ -45,6 +46,8 @@ def search_content_chunks(
|
|
|
45
46
|
metadata_filter: dict[str, Any] | None = None,
|
|
46
47
|
content_ids: list[str] | None = None,
|
|
47
48
|
score_threshold: float | None = None,
|
|
49
|
+
merge_strategy: ContentSearchMergeStrategy | None = None,
|
|
50
|
+
include_scores: bool | None = None,
|
|
48
51
|
) -> list[ContentChunk]:
|
|
49
52
|
"""
|
|
50
53
|
Performs a synchronous search for content chunks in the knowledge base.
|
|
@@ -60,6 +63,8 @@ def search_content_chunks(
|
|
|
60
63
|
metadata_filter (dict | None): UniqueQL metadata filter. If unspecified/None, it tries to use the metadata filter from the event. Defaults to None.
|
|
61
64
|
content_ids (list[str] | None): The content IDs to search. Defaults to None.
|
|
62
65
|
score_threshold (float | None): The minimum score threshold for results. Defaults to 0.
|
|
66
|
+
merge_strategy (ContentSearchMergeStrategy | None): How a COMBINED search merges vector and full-text results. ``ZIP`` interleaves the two lists and keeps each result's original score. ``RRF`` and ``DBSF`` replace those scores with a fused score. Ignored by other search types. Defaults to the backend configuration.
|
|
67
|
+
include_scores (bool | None): When true, each ``ContentChunk.score`` is set. Vector search returns a similarity score, full-text search a BM25 score, and a COMBINED search a fused score for ``RRF`` and ``DBSF``. Scores are only comparable within one search type. Defaults to None.
|
|
63
68
|
Returns:
|
|
64
69
|
list[ContentChunk]: The search results.
|
|
65
70
|
"""
|
|
@@ -86,6 +91,8 @@ def search_content_chunks(
|
|
|
86
91
|
metaDataFilter=metadata_filter,
|
|
87
92
|
contentIds=content_ids,
|
|
88
93
|
scoreThreshold=score_threshold,
|
|
94
|
+
mergeStrategy=merge_strategy.value if merge_strategy else None,
|
|
95
|
+
includeScores=include_scores,
|
|
89
96
|
)
|
|
90
97
|
return map_to_content_chunks(searches)
|
|
91
98
|
except Exception as e:
|
|
@@ -107,6 +114,8 @@ async def search_content_chunks_async(
|
|
|
107
114
|
metadata_filter: dict[str, Any] | None = None,
|
|
108
115
|
content_ids: list[str] | None = None,
|
|
109
116
|
score_threshold: float | None = None,
|
|
117
|
+
merge_strategy: ContentSearchMergeStrategy | None = None,
|
|
118
|
+
include_scores: bool | None = None,
|
|
110
119
|
):
|
|
111
120
|
"""
|
|
112
121
|
Performs an asynchronous search for content chunks in the knowledge base.
|
|
@@ -136,6 +145,8 @@ async def search_content_chunks_async(
|
|
|
136
145
|
metaDataFilter=metadata_filter,
|
|
137
146
|
contentIds=content_ids,
|
|
138
147
|
scoreThreshold=score_threshold,
|
|
148
|
+
mergeStrategy=merge_strategy.value if merge_strategy else None,
|
|
149
|
+
includeScores=include_scores,
|
|
139
150
|
)
|
|
140
151
|
return map_to_content_chunks(searches)
|
|
141
152
|
except Exception as e:
|
{unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/schemas.py
RENAMED
|
@@ -70,6 +70,11 @@ class ContentChunk(BaseModel):
|
|
|
70
70
|
description="The end page of the chunk. For document chunks this is the end page of the document.",
|
|
71
71
|
)
|
|
72
72
|
|
|
73
|
+
score: float | None = Field(
|
|
74
|
+
default=None,
|
|
75
|
+
description="The relevance score of the chunk. Only set when the search requested scores. Scores are comparable within a single search type only.",
|
|
76
|
+
)
|
|
77
|
+
|
|
73
78
|
object: str | None = None
|
|
74
79
|
metadata: ContentMetadata | None = None
|
|
75
80
|
internally_stored_at: datetime | None = None
|
|
@@ -294,6 +299,18 @@ class ContentSearchType(StrEnum):
|
|
|
294
299
|
VECTOR = "VECTOR"
|
|
295
300
|
|
|
296
301
|
|
|
302
|
+
class ContentSearchMergeStrategy(StrEnum):
|
|
303
|
+
"""How a ``COMBINED`` search merges vector and full-text results.
|
|
304
|
+
|
|
305
|
+
Ignored by single-source search types. When omitted, the backend applies its
|
|
306
|
+
configured default.
|
|
307
|
+
"""
|
|
308
|
+
|
|
309
|
+
ZIP = "ZIP"
|
|
310
|
+
RRF = "RRF"
|
|
311
|
+
DBSF = "DBSF"
|
|
312
|
+
|
|
313
|
+
|
|
297
314
|
class ContentSearchResult(BaseModel):
|
|
298
315
|
"""Schema corresponding to unique_sdk.SearchResult"""
|
|
299
316
|
|
{unique_toolkit-2026.44.0.dev3 → unique_toolkit-2026.44.0.dev5}/unique_toolkit/content/service.py
RENAMED
|
@@ -30,6 +30,7 @@ from unique_toolkit.content.schemas import (
|
|
|
30
30
|
Content,
|
|
31
31
|
ContentChunk,
|
|
32
32
|
ContentRerankerConfig,
|
|
33
|
+
ContentSearchMergeStrategy,
|
|
33
34
|
ContentSearchType,
|
|
34
35
|
)
|
|
35
36
|
|
|
@@ -357,6 +358,8 @@ class ContentService:
|
|
|
357
358
|
metadata_filter: dict[str, Any] | None = None,
|
|
358
359
|
content_ids: list[str] | None = None,
|
|
359
360
|
score_threshold: float | None = None,
|
|
361
|
+
merge_strategy: ContentSearchMergeStrategy | None = None,
|
|
362
|
+
include_scores: bool | None = None,
|
|
360
363
|
) -> list[ContentChunk]:
|
|
361
364
|
"""
|
|
362
365
|
Performs a synchronous search for content chunks in the knowledge base.
|
|
@@ -373,6 +376,8 @@ class ContentService:
|
|
|
373
376
|
metadata_filter (dict | None, optional): UniqueQL metadata filter. If unspecified/None, it tries to use the metadata filter from the event. Defaults to None.
|
|
374
377
|
content_ids (list[str] | None, optional): The content IDs to search within. Defaults to None.
|
|
375
378
|
score_threshold (float | None, optional): Sets the minimum similarity score for search results to be considered. Defaults to 0.
|
|
379
|
+
merge_strategy (ContentSearchMergeStrategy | None, optional): How a COMBINED search merges vector and full-text results. ``ZIP`` interleaves the two lists and keeps each result's original score. ``RRF`` and ``DBSF`` replace those scores with a fused score. Ignored by other search types. Defaults to the backend configuration.
|
|
380
|
+
include_scores (bool | None, optional): When true, each ``ContentChunk.score`` is set. Vector search returns a similarity score, full-text search a BM25 score, and a COMBINED search a fused score for ``RRF`` and ``DBSF``. Scores are only comparable within one search type. Defaults to None.
|
|
376
381
|
|
|
377
382
|
Returns:
|
|
378
383
|
list[ContentChunk]: The search results.
|
|
@@ -404,6 +409,8 @@ class ContentService:
|
|
|
404
409
|
metadata_filter=metadata_filter,
|
|
405
410
|
content_ids=content_ids,
|
|
406
411
|
score_threshold=score_threshold,
|
|
412
|
+
merge_strategy=merge_strategy,
|
|
413
|
+
include_scores=include_scores,
|
|
407
414
|
)
|
|
408
415
|
return searches
|
|
409
416
|
except Exception as e:
|
|
@@ -424,6 +431,8 @@ class ContentService:
|
|
|
424
431
|
metadata_filter: dict[str, Any] | None = None,
|
|
425
432
|
content_ids: list[str] | None = None,
|
|
426
433
|
score_threshold: float | None = None,
|
|
434
|
+
merge_strategy: ContentSearchMergeStrategy | None = None,
|
|
435
|
+
include_scores: bool | None = None,
|
|
427
436
|
):
|
|
428
437
|
"""
|
|
429
438
|
Performs an asynchronous search for content chunks in the knowledge base.
|
|
@@ -440,6 +449,8 @@ class ContentService:
|
|
|
440
449
|
metadata_filter (dict | None, optional): UniqueQL metadata filter. If unspecified/None, it tries to use the metadata filter from the event. Defaults to None.
|
|
441
450
|
content_ids (list[str] | None, optional): The content IDs to search within. Defaults to None.
|
|
442
451
|
score_threshold (float | None, optional): Sets the minimum similarity score for search results to be considered. Defaults to 0.
|
|
452
|
+
merge_strategy (ContentSearchMergeStrategy | None, optional): How a COMBINED search merges vector and full-text results. ``ZIP`` interleaves the two lists and keeps each result's original score. ``RRF`` and ``DBSF`` replace those scores with a fused score. Ignored by other search types. Defaults to the backend configuration.
|
|
453
|
+
include_scores (bool | None, optional): When true, each ``ContentChunk.score`` is set. Vector search returns a similarity score, full-text search a BM25 score, and a COMBINED search a fused score for ``RRF`` and ``DBSF``. Scores are only comparable within one search type. Defaults to None.
|
|
443
454
|
|
|
444
455
|
Returns:
|
|
445
456
|
list[ContentChunk]: The search results.
|
|
@@ -470,6 +481,8 @@ class ContentService:
|
|
|
470
481
|
metadata_filter=metadata_filter,
|
|
471
482
|
content_ids=content_ids,
|
|
472
483
|
score_threshold=score_threshold,
|
|
484
|
+
merge_strategy=merge_strategy,
|
|
485
|
+
include_scores=include_scores,
|
|
473
486
|
)
|
|
474
487
|
return searches
|
|
475
488
|
except Exception as e:
|
|
@@ -21,6 +21,9 @@ from unique_toolkit.language_model.infos import (
|
|
|
21
21
|
LanguageModelName,
|
|
22
22
|
ModelCapabilities,
|
|
23
23
|
)
|
|
24
|
+
from unique_toolkit.language_model.provider_token_count import (
|
|
25
|
+
build_provider_token_count_payload,
|
|
26
|
+
)
|
|
24
27
|
from unique_toolkit.language_model.reference import (
|
|
25
28
|
add_references_to_message,
|
|
26
29
|
)
|
|
@@ -748,3 +751,35 @@ async def stream_complete_with_references_openai(
|
|
|
748
751
|
except Exception as e:
|
|
749
752
|
logger.error("Error streaming completion (model=%s): %s", model_name_, e)
|
|
750
753
|
raise
|
|
754
|
+
|
|
755
|
+
|
|
756
|
+
async def count_tokens_with_provider_async(
|
|
757
|
+
*,
|
|
758
|
+
company_id: str,
|
|
759
|
+
user_id: str,
|
|
760
|
+
messages: LanguageModelMessages | list[ChatCompletionMessageParam],
|
|
761
|
+
model_name: LanguageModelName | str,
|
|
762
|
+
temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
|
|
763
|
+
tools: Sequence[LanguageModelTool | LanguageModelToolDescription] | None = None,
|
|
764
|
+
other_options: dict[str, Any] | None = None,
|
|
765
|
+
) -> int:
|
|
766
|
+
"""Count the completion payload with LiteLLM's provider-backed counter."""
|
|
767
|
+
options, model, messages_dict, _ = _prepare_all_completions_params_util(
|
|
768
|
+
messages=messages,
|
|
769
|
+
model_name=model_name,
|
|
770
|
+
temperature=temperature,
|
|
771
|
+
tools=tools,
|
|
772
|
+
other_options=other_options,
|
|
773
|
+
)
|
|
774
|
+
raw_tools = options.get("tools")
|
|
775
|
+
payload = build_provider_token_count_payload(
|
|
776
|
+
model=model,
|
|
777
|
+
messages=messages_dict,
|
|
778
|
+
tools=raw_tools if isinstance(raw_tools, list) else None,
|
|
779
|
+
)
|
|
780
|
+
response = await unique_sdk.Integrated.count_tokens_async(
|
|
781
|
+
user_id=user_id,
|
|
782
|
+
company_id=company_id,
|
|
783
|
+
**payload,
|
|
784
|
+
)
|
|
785
|
+
return response["input_tokens"]
|