unique_toolkit 2026.38.0.dev18__tar.gz → 2026.40.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/PKG-INFO +2 -2
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/pyproject.toml +2 -2
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/hallucination/utils.py +3 -2
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +64 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/feature_flags/feature_flags.py +14 -6
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/loop_runner/__init__.py +2 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/loop_runner/runners/__init__.py +6 -0
- unique_toolkit-2026.40.0/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/__init__.py +9 -0
- unique_toolkit-2026.40.0/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/helpers.py +32 -0
- unique_toolkit-2026.40.0/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/runner.py +53 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +20 -14
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +24 -37
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/config.py +3 -3
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic_table/service.py +22 -17
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/chat/functions.py +40 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/chat/schemas.py +6 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/language_model/infos.py +209 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/services/chat_service.py +31 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/README.md +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/metadata_filter_scope.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_external_context.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/history_manager/settings.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/message_log_order.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/reference_manager/tests/test_external_context.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/tool.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/names.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_container.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_files.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_memory.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/builder.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/office_preview.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/run_context.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic_table/synthetic_chat_event.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/app/feature_flags.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/app/find_env_file.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/chat/deprecated/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/README.md +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/_internal/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/_base.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/content_tree/functions.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/internal_search/base/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/identity/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_model_params.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/feature_flags/README.md +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/feature_flags/_graphql_client.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/feature_flags/_ttl_cache.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/feature_flags/client.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/feature_flags/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/feature_flags/settings.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/group/functions.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/group/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/user/functions.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/resources/user/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/experimental/testing/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/language_model/invocation_stats.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/language_model/model_costs.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/language_model/settings.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/monitoring/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/monitoring/gunicorn.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/monitoring/memory.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/monitoring/middleware.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/monitoring/registry.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/monitoring/tracing.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/services/factory.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/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.
|
|
3
|
+
Version: 2026.40.0
|
|
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.
|
|
19
|
+
Requires-Dist: unique-sdk>=2026.40.0
|
|
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.
|
|
3
|
+
version = "2026.40.0"
|
|
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.
|
|
31
|
+
"unique-sdk>=2026.40.0",
|
|
32
32
|
"jambo>=0.1.2,<0.2",
|
|
33
33
|
"jinja2>=3.1.6,<4",
|
|
34
34
|
"docxtpl>=0.20.1,<0.21",
|
|
@@ -203,7 +203,8 @@ def _compose_msgs(
|
|
|
203
203
|
)
|
|
204
204
|
system_msg = LanguageModelSystemMessage(content=system_msg_content)
|
|
205
205
|
|
|
206
|
-
# Render user message
|
|
206
|
+
# Render user message. Pass history text only when history exists so the
|
|
207
|
+
# template can omit an empty conversation section.
|
|
207
208
|
user_msg_content = render_template(
|
|
208
209
|
user_template,
|
|
209
210
|
input_text=input.input_text,
|
|
@@ -211,7 +212,7 @@ def _compose_msgs(
|
|
|
211
212
|
if has_context
|
|
212
213
|
else None,
|
|
213
214
|
history_messages_text=input.get_joined_history_texts(tag_name="conversation")
|
|
214
|
-
if has_context
|
|
215
|
+
if has_context and input.history_messages
|
|
215
216
|
else None,
|
|
216
217
|
output_text=input.output_text,
|
|
217
218
|
)
|
|
@@ -1224,3 +1224,67 @@ def test_get_msgs__ignores_context_images__when_model_lacks_vision() -> None:
|
|
|
1224
1224
|
# Assert
|
|
1225
1225
|
assert result.root[0].content == no_context_result.root[0].content
|
|
1226
1226
|
assert isinstance(result.root[1].content, str)
|
|
1227
|
+
|
|
1228
|
+
|
|
1229
|
+
@pytest.mark.unit
|
|
1230
|
+
def test_compose_msgs__omits_conversation_section__when_history_is_empty():
|
|
1231
|
+
"""A single-turn evaluation must not be shown an empty conversation.
|
|
1232
|
+
|
|
1233
|
+
The template guards the section with `{% if history_messages_text %}`,
|
|
1234
|
+
and the getter returns a truthy placeholder when there is no history, so
|
|
1235
|
+
the guard used to never fire: every caller evaluating one turn shipped a
|
|
1236
|
+
`Conversation:` section whose body said there was no conversation, while
|
|
1237
|
+
the system prompt announced one.
|
|
1238
|
+
"""
|
|
1239
|
+
msgs = _compose_msgs(
|
|
1240
|
+
EvaluationMetricInput(
|
|
1241
|
+
input_text="What is the policy rate?",
|
|
1242
|
+
context_texts=["The policy rate is 0.25%."],
|
|
1243
|
+
history_messages=[],
|
|
1244
|
+
output_text="0.25%.",
|
|
1245
|
+
),
|
|
1246
|
+
HallucinationConfig(),
|
|
1247
|
+
has_context=True,
|
|
1248
|
+
)
|
|
1249
|
+
|
|
1250
|
+
user_content = msgs.root[-1].content
|
|
1251
|
+
assert isinstance(user_content, str)
|
|
1252
|
+
assert "Conversation:" not in user_content
|
|
1253
|
+
assert "<No conversation texts provided>" not in user_content
|
|
1254
|
+
# The references the model does have must still be there.
|
|
1255
|
+
assert "The policy rate is 0.25%." in user_content
|
|
1256
|
+
|
|
1257
|
+
|
|
1258
|
+
@pytest.mark.unit
|
|
1259
|
+
def test_compose_msgs__keeps_conversation_section__when_history_is_present():
|
|
1260
|
+
msgs = _compose_msgs(
|
|
1261
|
+
EvaluationMetricInput(
|
|
1262
|
+
input_text="And in March?",
|
|
1263
|
+
context_texts=["The March rate was 0.50%."],
|
|
1264
|
+
history_messages=[
|
|
1265
|
+
ChatMessage(
|
|
1266
|
+
id="msg_1",
|
|
1267
|
+
chat_id="chat_1",
|
|
1268
|
+
previous_message_id=None,
|
|
1269
|
+
role=LanguageModelMessageRole.USER,
|
|
1270
|
+
text="What is the policy rate?",
|
|
1271
|
+
),
|
|
1272
|
+
ChatMessage(
|
|
1273
|
+
id="msg_2",
|
|
1274
|
+
chat_id="chat_1",
|
|
1275
|
+
previous_message_id="msg_1",
|
|
1276
|
+
role=LanguageModelMessageRole.ASSISTANT,
|
|
1277
|
+
text="0.25%.",
|
|
1278
|
+
),
|
|
1279
|
+
],
|
|
1280
|
+
output_text="0.50%.",
|
|
1281
|
+
),
|
|
1282
|
+
HallucinationConfig(),
|
|
1283
|
+
has_context=True,
|
|
1284
|
+
)
|
|
1285
|
+
|
|
1286
|
+
user_content = msgs.root[-1].content
|
|
1287
|
+
assert isinstance(user_content, str)
|
|
1288
|
+
assert "Conversation:" in user_content
|
|
1289
|
+
assert "What is the policy rate?" in user_content
|
|
1290
|
+
assert "<No conversation texts provided>" not in user_content
|
|
@@ -23,10 +23,6 @@ class FeatureFlagNames(StrEnum):
|
|
|
23
23
|
"FEATURE_FLAG_ENABLE_MCP_METADATA_FALLBACK_UN_19145"
|
|
24
24
|
)
|
|
25
25
|
enable_html_rendering_un_15131 = "FEATURE_FLAG_ENABLE_HTML_RENDERING_UN_15131"
|
|
26
|
-
enable_code_execution_fence_un_17972 = (
|
|
27
|
-
"FEATURE_FLAG_ENABLE_CODE_EXECUTION_FENCE_UN_17972"
|
|
28
|
-
)
|
|
29
|
-
enable_html_with_fence_un_17927 = "FEATURE_FLAG_ENABLE_HTML_WITH_FENCE_UN_17927"
|
|
30
26
|
enable_web_search_argument_screening_un_18741 = (
|
|
31
27
|
"FEATURE_FLAG_ENABLE_WEB_SEARCH_ARGUMENT_SCREENING_UN_18741"
|
|
32
28
|
)
|
|
@@ -110,12 +106,24 @@ class FeatureFlags(BaseSettings):
|
|
|
110
106
|
|
|
111
107
|
enable_code_execution_fence_un_17972: FeatureFlag = Field(
|
|
112
108
|
default=FeatureFlag(False),
|
|
113
|
-
description=
|
|
109
|
+
description=(
|
|
110
|
+
"Retired: replaced by the `enable_code_execution_fence` config field "
|
|
111
|
+
"on ShowExecutedCodePostprocessorConfig (default true). "
|
|
112
|
+
"No code reads this field anymore. Kept only so removing it doesn't "
|
|
113
|
+
"trip the config-checker's breaking-change gate on this settings "
|
|
114
|
+
"model; delete once that checker allows field removal."
|
|
115
|
+
),
|
|
114
116
|
)
|
|
115
117
|
|
|
116
118
|
enable_html_with_fence_un_17927: FeatureFlag = Field(
|
|
117
119
|
default=FeatureFlag(False),
|
|
118
|
-
description=
|
|
120
|
+
description=(
|
|
121
|
+
"Retired: replaced by the `enable_html_with_fence` config field "
|
|
122
|
+
"on ShowExecutedCodePostprocessorConfig (default true). "
|
|
123
|
+
"No code reads this field anymore. Kept only so removing it doesn't "
|
|
124
|
+
"trip the config-checker's breaking-change gate on this settings "
|
|
125
|
+
"model; delete once that checker allows field removal."
|
|
126
|
+
),
|
|
119
127
|
)
|
|
120
128
|
|
|
121
129
|
enable_web_search_argument_screening_un_18741: FeatureFlag = Field(
|
|
@@ -21,6 +21,7 @@ from unique_toolkit.agentic.loop_runner.runners import (
|
|
|
21
21
|
BasicLoopIterationRunner,
|
|
22
22
|
BasicLoopIterationRunnerConfig,
|
|
23
23
|
MistralLoopIterationRunner,
|
|
24
|
+
PromptForcedToolLoopIterationRunner,
|
|
24
25
|
QwenLoopIterationRunner,
|
|
25
26
|
ResponsesBasicLoopIterationRunner,
|
|
26
27
|
)
|
|
@@ -34,6 +35,7 @@ __all__ = [
|
|
|
34
35
|
"BasicLoopIterationRunnerConfig",
|
|
35
36
|
"BasicLoopIterationRunner",
|
|
36
37
|
"MistralLoopIterationRunner",
|
|
38
|
+
"PromptForcedToolLoopIterationRunner",
|
|
37
39
|
"QwenLoopIterationRunner",
|
|
38
40
|
"handle_forced_tools_iteration",
|
|
39
41
|
"handle_last_iteration",
|
|
@@ -6,6 +6,10 @@ from unique_toolkit.agentic.loop_runner.runners.basic import (
|
|
|
6
6
|
from unique_toolkit.agentic.loop_runner.runners.mistral import (
|
|
7
7
|
MistralLoopIterationRunner,
|
|
8
8
|
)
|
|
9
|
+
from unique_toolkit.agentic.loop_runner.runners.prompt_forced_tool import (
|
|
10
|
+
PROMPT_FORCED_TOOL_CALL_INSTRUCTION,
|
|
11
|
+
PromptForcedToolLoopIterationRunner,
|
|
12
|
+
)
|
|
9
13
|
from unique_toolkit.agentic.loop_runner.runners.qwen import (
|
|
10
14
|
QWEN_FORCED_TOOL_CALL_INSTRUCTION,
|
|
11
15
|
QWEN_LAST_ITERATION_INSTRUCTION,
|
|
@@ -18,6 +22,8 @@ __all__ = [
|
|
|
18
22
|
"BasicLoopIterationRunner",
|
|
19
23
|
"ResponsesBasicLoopIterationRunner",
|
|
20
24
|
"MistralLoopIterationRunner",
|
|
25
|
+
"PROMPT_FORCED_TOOL_CALL_INSTRUCTION",
|
|
26
|
+
"PromptForcedToolLoopIterationRunner",
|
|
21
27
|
"QwenLoopIterationRunner",
|
|
22
28
|
"QWEN_FORCED_TOOL_CALL_INSTRUCTION",
|
|
23
29
|
"QWEN_LAST_ITERATION_INSTRUCTION",
|
unique_toolkit-2026.40.0/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/__init__.py
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
from unique_toolkit.agentic.loop_runner.runners.prompt_forced_tool.runner import (
|
|
2
|
+
PROMPT_FORCED_TOOL_CALL_INSTRUCTION,
|
|
3
|
+
PromptForcedToolLoopIterationRunner,
|
|
4
|
+
)
|
|
5
|
+
|
|
6
|
+
__all__ = [
|
|
7
|
+
"PROMPT_FORCED_TOOL_CALL_INSTRUCTION",
|
|
8
|
+
"PromptForcedToolLoopIterationRunner",
|
|
9
|
+
]
|
unique_toolkit-2026.40.0/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/helpers.py
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""Message helpers for models that reject a forced tool_choice."""
|
|
2
|
+
|
|
3
|
+
from unique_toolkit.language_model.schemas import (
|
|
4
|
+
LanguageModelMessageRole,
|
|
5
|
+
LanguageModelMessages,
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def append_prompt_forced_tool_instruction(
|
|
10
|
+
*,
|
|
11
|
+
messages: LanguageModelMessages,
|
|
12
|
+
instruction: str,
|
|
13
|
+
) -> LanguageModelMessages:
|
|
14
|
+
"""Append a must-call instruction to the last user message.
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
messages (LanguageModelMessages): Conversation copied for this tool.
|
|
18
|
+
instruction (str): Instruction that names the tool to call.
|
|
19
|
+
|
|
20
|
+
Returns:
|
|
21
|
+
LanguageModelMessages: A new message list with the instruction appended
|
|
22
|
+
when the last user message has string content.
|
|
23
|
+
"""
|
|
24
|
+
messages_list = list(messages)
|
|
25
|
+
for i in range(len(messages_list) - 1, -1, -1):
|
|
26
|
+
msg = messages_list[i]
|
|
27
|
+
if msg.role == LanguageModelMessageRole.USER and isinstance(msg.content, str):
|
|
28
|
+
messages_list[i] = msg.model_copy(
|
|
29
|
+
update={"content": msg.content + "\n" + instruction}
|
|
30
|
+
)
|
|
31
|
+
break
|
|
32
|
+
return LanguageModelMessages(root=messages_list)
|
unique_toolkit-2026.40.0/unique_toolkit/agentic/loop_runner/runners/prompt_forced_tool/runner.py
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""Loop runner for models that reject forced tool_choice values."""
|
|
2
|
+
|
|
3
|
+
from typing import Unpack
|
|
4
|
+
|
|
5
|
+
from unique_toolkit.agentic.loop_runner._iteration_handler_utils import (
|
|
6
|
+
run_forced_tools_iteration,
|
|
7
|
+
)
|
|
8
|
+
from unique_toolkit.agentic.loop_runner.base import _LoopIterationRunnerKwargs
|
|
9
|
+
from unique_toolkit.agentic.loop_runner.runners.basic import (
|
|
10
|
+
BasicLoopIterationRunner,
|
|
11
|
+
)
|
|
12
|
+
from unique_toolkit.agentic.loop_runner.runners.prompt_forced_tool.helpers import (
|
|
13
|
+
append_prompt_forced_tool_instruction,
|
|
14
|
+
)
|
|
15
|
+
from unique_toolkit.chat.functions import LanguageModelStreamResponse
|
|
16
|
+
|
|
17
|
+
PROMPT_FORCED_TOOL_CALL_INSTRUCTION = (
|
|
18
|
+
"You must call the tool {TOOL_NAME}. Call it instead of replying with text."
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class PromptForcedToolLoopIterationRunner(BasicLoopIterationRunner):
|
|
23
|
+
"""Runner for models that reject named and ``any`` tool choices.
|
|
24
|
+
|
|
25
|
+
Claude Opus 5.5 and Fable 5.1 return HTTP 400 for those ``tool_choice``
|
|
26
|
+
types. This runner keeps one request per forced tool, limits ``tools`` to
|
|
27
|
+
that tool, sends ``tool_choice="auto"``, and asks for the call in the prompt.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
async def _handle_forced_tools(
|
|
31
|
+
self,
|
|
32
|
+
**kwargs: Unpack[_LoopIterationRunnerKwargs],
|
|
33
|
+
) -> LanguageModelStreamResponse:
|
|
34
|
+
original_messages = kwargs["messages"].model_copy(deep=True)
|
|
35
|
+
|
|
36
|
+
def _prepare(
|
|
37
|
+
func_name: str | None,
|
|
38
|
+
per_choice_kwargs: _LoopIterationRunnerKwargs,
|
|
39
|
+
) -> _LoopIterationRunnerKwargs:
|
|
40
|
+
instruction = PROMPT_FORCED_TOOL_CALL_INSTRUCTION.format(
|
|
41
|
+
TOOL_NAME=func_name or ""
|
|
42
|
+
)
|
|
43
|
+
per_choice_kwargs["messages"] = append_prompt_forced_tool_instruction(
|
|
44
|
+
messages=original_messages,
|
|
45
|
+
instruction=instruction,
|
|
46
|
+
)
|
|
47
|
+
return per_choice_kwargs
|
|
48
|
+
|
|
49
|
+
return await run_forced_tools_iteration(
|
|
50
|
+
loop_runner_kwargs=kwargs,
|
|
51
|
+
prepare_loop_runner_kwargs=_prepare,
|
|
52
|
+
tool_choice_override="auto",
|
|
53
|
+
)
|
|
@@ -6,15 +6,10 @@ from typing import override
|
|
|
6
6
|
from pydantic import BaseModel, Field
|
|
7
7
|
from pydantic.json_schema import SkipJsonSchema
|
|
8
8
|
|
|
9
|
-
from unique_toolkit.agentic.feature_flags import FeatureFlagNames
|
|
10
9
|
from unique_toolkit.agentic.postprocessor.postprocessor_manager import (
|
|
11
10
|
ResponsesApiPostprocessor,
|
|
12
11
|
)
|
|
13
12
|
from unique_toolkit.agentic.tools.config import get_configuration_dict
|
|
14
|
-
from unique_toolkit.experimental.resources.feature_flags import (
|
|
15
|
-
COMPANY_ID_PLACEHOLDER,
|
|
16
|
-
is_flag_enabled,
|
|
17
|
-
)
|
|
18
13
|
from unique_toolkit.language_model.schemas import ResponsesLanguageModelStreamResponse
|
|
19
14
|
|
|
20
15
|
_TEMPLATE = """
|
|
@@ -37,7 +32,23 @@ class ShowExecutedCodePostprocessorConfig(BaseModel):
|
|
|
37
32
|
model_config = get_configuration_dict()
|
|
38
33
|
enable: bool = Field(
|
|
39
34
|
default=True,
|
|
40
|
-
description="
|
|
35
|
+
description="Show the executed source code to the user",
|
|
36
|
+
)
|
|
37
|
+
enable_code_execution_fence: bool = Field(
|
|
38
|
+
default=True,
|
|
39
|
+
description=(
|
|
40
|
+
"Show generated files as interactive cards with a built-in code view "
|
|
41
|
+
"and hide the legacy collapsible code block below."
|
|
42
|
+
),
|
|
43
|
+
)
|
|
44
|
+
enable_html_with_fence: bool = Field(
|
|
45
|
+
default=True,
|
|
46
|
+
description=(
|
|
47
|
+
"Show generated HTML files as interactive cards with a built-in code "
|
|
48
|
+
"view instead of a plain rendered HTML block. Has no effect on its "
|
|
49
|
+
"own: 'enable_code_execution_fence' must be on as well. While that "
|
|
50
|
+
"switch is off, HTML files stay a plain rendered HTML block."
|
|
51
|
+
),
|
|
41
52
|
)
|
|
42
53
|
remove_from_history: SkipJsonSchema[bool] = (
|
|
43
54
|
Field( # At the moment, it's not possible to keep executed code in the history
|
|
@@ -55,20 +66,15 @@ class ShowExecutedCodePostprocessor(ResponsesApiPostprocessor):
|
|
|
55
66
|
def __init__(
|
|
56
67
|
self,
|
|
57
68
|
config: ShowExecutedCodePostprocessorConfig,
|
|
58
|
-
company_id: str | None = None,
|
|
59
69
|
):
|
|
60
70
|
super().__init__(self.__class__.__name__)
|
|
61
71
|
self._config = config
|
|
62
|
-
|
|
63
|
-
#
|
|
64
|
-
self._is_enabled =
|
|
72
|
+
# When fences are enabled, the fence itself shows the executed code,
|
|
73
|
+
# so this legacy <details> display must stay off.
|
|
74
|
+
self._is_enabled = config.enable and not config.enable_code_execution_fence
|
|
65
75
|
|
|
66
76
|
@override
|
|
67
77
|
async def run(self, loop_response: ResponsesLanguageModelStreamResponse) -> None:
|
|
68
|
-
self._is_enabled = self._config.enable and not await is_flag_enabled(
|
|
69
|
-
FeatureFlagNames.enable_code_execution_fence_un_17972,
|
|
70
|
-
company_id=self._company_id or COMPANY_ID_PLACEHOLDER,
|
|
71
|
-
)
|
|
72
78
|
if self._is_enabled:
|
|
73
79
|
await asyncio.sleep(self._config.sleep_time_before_display)
|
|
74
80
|
|
|
@@ -21,7 +21,6 @@ from tenacity import (
|
|
|
21
21
|
|
|
22
22
|
from unique_toolkit import ChatService
|
|
23
23
|
from unique_toolkit._common.execution import failsafe_async
|
|
24
|
-
from unique_toolkit.agentic.feature_flags import FeatureFlagNames
|
|
25
24
|
from unique_toolkit.agentic.postprocessor.postprocessor_manager import (
|
|
26
25
|
ResponsesApiPostprocessor,
|
|
27
26
|
)
|
|
@@ -40,10 +39,6 @@ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.schemas import
|
|
|
40
39
|
)
|
|
41
40
|
from unique_toolkit.content.schemas import ContentReference
|
|
42
41
|
from unique_toolkit.content.service import ContentService
|
|
43
|
-
from unique_toolkit.experimental.resources.feature_flags import (
|
|
44
|
-
COMPANY_ID_PLACEHOLDER,
|
|
45
|
-
is_flag_enabled,
|
|
46
|
-
)
|
|
47
42
|
from unique_toolkit.language_model.schemas import ResponsesLanguageModelStreamResponse
|
|
48
43
|
from unique_toolkit.services.knowledge_base import KnowledgeBaseService
|
|
49
44
|
from unique_toolkit.short_term_memory.service import ShortTermMemoryService
|
|
@@ -376,6 +371,8 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
376
371
|
company_id: str | None = None,
|
|
377
372
|
user_id: str | None = None,
|
|
378
373
|
chat_id: str | None = None,
|
|
374
|
+
code_execution_fence_enabled: bool = True,
|
|
375
|
+
html_with_fence_enabled: bool = True,
|
|
379
376
|
) -> None:
|
|
380
377
|
super().__init__(self.__class__.__name__)
|
|
381
378
|
|
|
@@ -383,7 +380,6 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
383
380
|
self._chat_service = chat_service
|
|
384
381
|
self._client = client
|
|
385
382
|
self._config = config
|
|
386
|
-
self._company_id = company_id
|
|
387
383
|
|
|
388
384
|
if self._chat_service is None:
|
|
389
385
|
raise ValueError("ChatService is required if uploadToChat is True")
|
|
@@ -404,9 +400,11 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
404
400
|
self._file_size_map: dict[str, int] = {}
|
|
405
401
|
self._container_files: list[CodeInterpreterContainerFile] = []
|
|
406
402
|
|
|
407
|
-
#
|
|
408
|
-
|
|
409
|
-
|
|
403
|
+
# Both switches are plain config values now (were FFs UN-17972 / UN-17927).
|
|
404
|
+
# They live on ShowExecutedCodePostprocessorConfig ("Code display" on the
|
|
405
|
+
# config page) and are passed in by the orchestrator.
|
|
406
|
+
self._fence_enabled = code_execution_fence_enabled
|
|
407
|
+
self._html_fence_enabled = html_with_fence_enabled
|
|
410
408
|
|
|
411
409
|
def _build_retry(self) -> AsyncRetrying:
|
|
412
410
|
"""Build a tenacity retry policy from the current config.
|
|
@@ -511,17 +509,6 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
511
509
|
run_t0 = time.monotonic()
|
|
512
510
|
self._log.info("run() started — fetching and uploading code interpreter files")
|
|
513
511
|
|
|
514
|
-
self._fence_ff_on = await is_flag_enabled(
|
|
515
|
-
FeatureFlagNames.enable_code_execution_fence_un_17972,
|
|
516
|
-
company_id=self._company_id or COMPANY_ID_PLACEHOLDER,
|
|
517
|
-
)
|
|
518
|
-
# htmlWithSource requires BOTH the fence FF and the HTML-fence FF on; default
|
|
519
|
-
# (FF off) keeps HtmlRendering, so existing deployments are unaffected.
|
|
520
|
-
self._html_fence_ff_on = await is_flag_enabled(
|
|
521
|
-
FeatureFlagNames.enable_html_with_fence_un_17927,
|
|
522
|
-
company_id=self._company_id or COMPANY_ID_PLACEHOLDER,
|
|
523
|
-
)
|
|
524
|
-
|
|
525
512
|
container_files = await self._resolve_container_files(loop_response)
|
|
526
513
|
self._container_files = container_files
|
|
527
514
|
self._log.info(
|
|
@@ -668,9 +655,9 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
668
655
|
) -> bool:
|
|
669
656
|
apply_t0 = time.monotonic()
|
|
670
657
|
self._log.info(
|
|
671
|
-
"apply_postprocessing started — %d file(s) in content_map,
|
|
658
|
+
"apply_postprocessing started — %d file(s) in content_map, fence_enabled=%s",
|
|
672
659
|
len(self._content_map),
|
|
673
|
-
self.
|
|
660
|
+
self._fence_enabled,
|
|
674
661
|
)
|
|
675
662
|
|
|
676
663
|
if loop_response.message.references is None:
|
|
@@ -711,9 +698,9 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
711
698
|
)
|
|
712
699
|
changed |= replaced
|
|
713
700
|
|
|
714
|
-
# HTML
|
|
715
|
-
#
|
|
716
|
-
elif is_html and not self.
|
|
701
|
+
# HTML uses HtmlRendering unless BOTH switches are on (htmlWithSource
|
|
702
|
+
# needs the code-execution fence too).
|
|
703
|
+
elif is_html and not (self._html_fence_enabled and self._fence_enabled):
|
|
717
704
|
loop_response.message.text, replaced = _replace_container_html_citation(
|
|
718
705
|
text=loop_response.message.text or "",
|
|
719
706
|
filename=filename,
|
|
@@ -721,15 +708,15 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
721
708
|
)
|
|
722
709
|
changed |= replaced
|
|
723
710
|
|
|
724
|
-
# Non-HTML files, or HTML when
|
|
725
|
-
# subsequent fence injection
|
|
711
|
+
# Non-HTML files, or HTML when both fence switches are on → inline
|
|
712
|
+
# content link for subsequent fence injection
|
|
726
713
|
else:
|
|
727
714
|
loop_response.message.text, replaced = _replace_container_file_citation(
|
|
728
715
|
text=loop_response.message.text or "",
|
|
729
716
|
filename=filename,
|
|
730
717
|
content_id=content_id,
|
|
731
718
|
ref_number=ref_number,
|
|
732
|
-
use_content_link=self.
|
|
719
|
+
use_content_link=self._fence_enabled,
|
|
733
720
|
)
|
|
734
721
|
changed |= replaced
|
|
735
722
|
|
|
@@ -746,7 +733,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
746
733
|
|
|
747
734
|
# HtmlRendering and htmlWithSource both embed contentId directly — no ContentReference needed
|
|
748
735
|
is_html_rendered = is_html
|
|
749
|
-
if replaced and not (is_image or is_html_rendered or self.
|
|
736
|
+
if replaced and not (is_image or is_html_rendered or self._fence_enabled):
|
|
750
737
|
loop_response.message.references.append(
|
|
751
738
|
ContentReference(
|
|
752
739
|
sequence_number=ref_number,
|
|
@@ -765,12 +752,12 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
765
752
|
error_files,
|
|
766
753
|
)
|
|
767
754
|
|
|
768
|
-
if self.
|
|
755
|
+
if self._fence_enabled:
|
|
769
756
|
code_blocks = _build_code_blocks(
|
|
770
757
|
loop_response,
|
|
771
758
|
self._content_map,
|
|
772
759
|
self._container_files,
|
|
773
|
-
include_html=self.
|
|
760
|
+
include_html=self._html_fence_enabled,
|
|
774
761
|
)
|
|
775
762
|
self._log.info(
|
|
776
763
|
"Fence injection — %d code block(s), files: %s",
|
|
@@ -778,7 +765,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
778
765
|
[f.filename for b in code_blocks for f in b.files],
|
|
779
766
|
)
|
|
780
767
|
_warn_unmatched_code_blocks(
|
|
781
|
-
self._content_map, code_blocks, include_html=self.
|
|
768
|
+
self._content_map, code_blocks, include_html=self._html_fence_enabled
|
|
782
769
|
)
|
|
783
770
|
text_before = loop_response.message.text
|
|
784
771
|
loop_response.message.text = _inject_code_execution_fences(
|
|
@@ -1503,7 +1490,7 @@ def _warn_unmatched_code_blocks(
|
|
|
1503
1490
|
) -> None:
|
|
1504
1491
|
"""Warn for files that were uploaded but could not be matched to any code block.
|
|
1505
1492
|
|
|
1506
|
-
When
|
|
1493
|
+
When fence rendering is enabled, every uploaded file should map to a code block
|
|
1507
1494
|
via its /mnt/data/<filename> path so it can receive a fence. If a file is not
|
|
1508
1495
|
matched (e.g. the LLM used a variable for the output path rather than a literal
|
|
1509
1496
|
string) it falls back to a plain unique://content/ link with no code context.
|
|
@@ -1634,10 +1621,10 @@ def _replace_container_file_citation(
|
|
|
1634
1621
|
) -> tuple[str, bool]:
|
|
1635
1622
|
"""Replace a sandbox file link with either an inline content link or a superscript ref.
|
|
1636
1623
|
|
|
1637
|
-
When
|
|
1638
|
-
replaced with [filename](unique://content/{id}) so the subsequent fence
|
|
1639
|
-
step can locate and wrap it. When
|
|
1640
|
-
original pre-fence behaviour is restored: the link is replaced with <sup>N</sup>
|
|
1624
|
+
When fence rendering is enabled in the config (use_content_link=True), the sandbox
|
|
1625
|
+
link is replaced with [filename](unique://content/{id}) so the subsequent fence
|
|
1626
|
+
injection step can locate and wrap it. When it is disabled (use_content_link=False),
|
|
1627
|
+
the original pre-fence behaviour is restored: the link is replaced with <sup>N</sup>
|
|
1641
1628
|
and the file remains accessible via the references panel.
|
|
1642
1629
|
"""
|
|
1643
1630
|
file_markdown = _sandbox_link_pattern(filename)
|
|
@@ -96,9 +96,9 @@ DEFAULT_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT = (
|
|
|
96
96
|
_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT_BASE + _TOOL_DESCRIPTION_FILES_SUFFIX
|
|
97
97
|
).strip()
|
|
98
98
|
|
|
99
|
-
#
|
|
100
|
-
#
|
|
101
|
-
#
|
|
99
|
+
# Default system prompt. The frontend derives the artifact title from the
|
|
100
|
+
# filename itself, so the LLM does not need to produce a markdown heading
|
|
101
|
+
# before the sandbox link.
|
|
102
102
|
#
|
|
103
103
|
# UN-19711 / Horizon follow-up: The HTML rules in the fence prompt reduce iframe height
|
|
104
104
|
# collapse when chat auto-measures the embedded document. Remaining gaps belong in the
|
{unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/agentic_table/service.py
RENAMED
|
@@ -653,6 +653,8 @@ class AgenticTableService:
|
|
|
653
653
|
row_orders: list[int],
|
|
654
654
|
status: RowVerificationStatus,
|
|
655
655
|
locked: bool | None = None,
|
|
656
|
+
*,
|
|
657
|
+
emit_library_sheet_verified_event: bool | None = None,
|
|
656
658
|
):
|
|
657
659
|
"""Update the verification status of multiple rows at once.
|
|
658
660
|
|
|
@@ -660,24 +662,27 @@ class AgenticTableService:
|
|
|
660
662
|
row_orders: The row indexes to update.
|
|
661
663
|
status: The verification status to set (``NEEDS_REVIEW``, etc.; matches public API).
|
|
662
664
|
locked: When set, forwarded as ``locked`` on ``POST .../rows/bulk-update-status``.
|
|
665
|
+
emit_library_sheet_verified_event: When set, forwarded as
|
|
666
|
+
``emitLibrarySheetVerifiedEvent``. ``False`` marks the rows without
|
|
667
|
+
starting a ``LIBRARY_SHEET_ROW_VERIFIED`` run on library sheets; use it
|
|
668
|
+
when the caller has already ingested the rows. ``None`` omits the field
|
|
669
|
+
and keeps the server default (``True``). Servers that predate the field
|
|
670
|
+
reject it with a 400, so only set it against a backend that supports it.
|
|
663
671
|
"""
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
status=status,
|
|
679
|
-
locked=locked,
|
|
680
|
-
)
|
|
672
|
+
params: AgenticTable.BulkUpdateStatus = {
|
|
673
|
+
"tableId": self.table_id,
|
|
674
|
+
"rowOrders": row_orders,
|
|
675
|
+
"status": status,
|
|
676
|
+
}
|
|
677
|
+
if locked is not None:
|
|
678
|
+
params["locked"] = locked
|
|
679
|
+
if emit_library_sheet_verified_event is not None:
|
|
680
|
+
params["emitLibrarySheetVerifiedEvent"] = emit_library_sheet_verified_event
|
|
681
|
+
await AgenticTable.bulk_update_status(
|
|
682
|
+
user_id=self._user_id,
|
|
683
|
+
company_id=self._company_id,
|
|
684
|
+
**params,
|
|
685
|
+
)
|
|
681
686
|
|
|
682
687
|
async def import_questions_and_sources(
|
|
683
688
|
self,
|
{unique_toolkit-2026.38.0.dev18 → unique_toolkit-2026.40.0}/unique_toolkit/chat/functions.py
RENAMED
|
@@ -188,6 +188,46 @@ async def modify_message_async(
|
|
|
188
188
|
raise e
|
|
189
189
|
|
|
190
190
|
|
|
191
|
+
async def mark_turn_system_interrupted_async(
|
|
192
|
+
user_id: str,
|
|
193
|
+
company_id: str,
|
|
194
|
+
chat_id: str,
|
|
195
|
+
user_message_id: str,
|
|
196
|
+
) -> ChatMessage:
|
|
197
|
+
"""Marks the turn anchored on *user_message_id* as system-interrupted.
|
|
198
|
+
|
|
199
|
+
Persists ``turnInterruptionReason = SYSTEM_INTERRUPTED`` on the originating
|
|
200
|
+
USER message via a dedicated service-authenticated node-chat endpoint. The
|
|
201
|
+
server guarantees idempotency and never overwrites ``userAbortedAt`` (a
|
|
202
|
+
user-initiated stop wins if both race).
|
|
203
|
+
|
|
204
|
+
Args:
|
|
205
|
+
user_id (str): The user ID.
|
|
206
|
+
company_id (str): The company ID.
|
|
207
|
+
chat_id (str): The chat ID.
|
|
208
|
+
user_message_id (str): The originating USER message of the turn.
|
|
209
|
+
|
|
210
|
+
Returns:
|
|
211
|
+
ChatMessage: The USER message after the update (unchanged if the call
|
|
212
|
+
was a no-op due to idempotency or a racing user stop).
|
|
213
|
+
|
|
214
|
+
Raises:
|
|
215
|
+
Exception: If the request fails.
|
|
216
|
+
|
|
217
|
+
"""
|
|
218
|
+
try:
|
|
219
|
+
message = await unique_sdk.Message.mark_turn_system_interrupted_async(
|
|
220
|
+
user_id=user_id,
|
|
221
|
+
company_id=company_id,
|
|
222
|
+
id=user_message_id,
|
|
223
|
+
chatId=chat_id,
|
|
224
|
+
)
|
|
225
|
+
return ChatMessage(**message)
|
|
226
|
+
except Exception as e:
|
|
227
|
+
_LOGGER.error(f"Failed to mark turn as system-interrupted: {e}")
|
|
228
|
+
raise e
|
|
229
|
+
|
|
230
|
+
|
|
191
231
|
def map_references(references: list[ContentReference]) -> list[dict[str, Any]]:
|
|
192
232
|
return [
|
|
193
233
|
{
|
|
@@ -192,6 +192,12 @@ class MessageLogStatus(StrEnum):
|
|
|
192
192
|
RUNNING = "RUNNING"
|
|
193
193
|
COMPLETED = "COMPLETED"
|
|
194
194
|
FAILED = "FAILED"
|
|
195
|
+
CANCELLED = "CANCELLED"
|
|
196
|
+
"""The user pressed Stop while this thinking/tool step was in flight.
|
|
197
|
+
|
|
198
|
+
Use ``FAILED`` for system-side interruption (timeout, truncation, terminal
|
|
199
|
+
backend failure), not for user-initiated cancellation.
|
|
200
|
+
"""
|
|
195
201
|
|
|
196
202
|
|
|
197
203
|
class MessageExecutionStatus(StrEnum):
|