unique_toolkit 1.68.10__tar.gz → 1.68.11__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-1.68.10 → unique_toolkit-1.68.11}/PKG-INFO +1 -1
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/pyproject.toml +1 -1
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +266 -8
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/README.md +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/services/chat_service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/services/factory.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/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: 1.68.
|
|
3
|
+
Version: 1.68.11
|
|
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>
|
|
@@ -2,6 +2,8 @@ import asyncio
|
|
|
2
2
|
import json
|
|
3
3
|
import logging
|
|
4
4
|
import re
|
|
5
|
+
import time
|
|
6
|
+
from dataclasses import dataclass
|
|
5
7
|
from mimetypes import guess_type
|
|
6
8
|
from typing import NamedTuple, override
|
|
7
9
|
|
|
@@ -76,6 +78,14 @@ class DisplayCodeInterpreterFilesPostProcessorConfig(BaseModel):
|
|
|
76
78
|
default=0.5,
|
|
77
79
|
description="Base delay in seconds for exponential backoff between download/upload retries.",
|
|
78
80
|
)
|
|
81
|
+
progress_update_interval: float = Field(
|
|
82
|
+
default=3.0,
|
|
83
|
+
description="Minimum seconds between progress message updates sent to the user.",
|
|
84
|
+
)
|
|
85
|
+
download_chunk_size: int = Field(
|
|
86
|
+
default=8192,
|
|
87
|
+
description="Chunk size in bytes for streaming container file downloads.",
|
|
88
|
+
)
|
|
79
89
|
|
|
80
90
|
|
|
81
91
|
class _ContentInfo(NamedTuple):
|
|
@@ -103,6 +113,141 @@ def _init_short_term_memory_manager(
|
|
|
103
113
|
)
|
|
104
114
|
|
|
105
115
|
|
|
116
|
+
@dataclass
|
|
117
|
+
class _FileState:
|
|
118
|
+
phase: str = "pending"
|
|
119
|
+
percent: int | None = None
|
|
120
|
+
elapsed_seconds: float = 0.0
|
|
121
|
+
retry_attempt: int = 0
|
|
122
|
+
max_retries: int = 0
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
class _FileProgressTracker:
|
|
126
|
+
"""Concurrency-safe coordinator that publishes file download/upload progress
|
|
127
|
+
to the user-visible assistant message in real time.
|
|
128
|
+
|
|
129
|
+
Replaces sandbox links inline with progress text and appends a summary block.
|
|
130
|
+
Throttles ``modify_assistant_message_async`` calls to avoid API spam.
|
|
131
|
+
"""
|
|
132
|
+
|
|
133
|
+
def __init__(
|
|
134
|
+
self,
|
|
135
|
+
filenames: list[str],
|
|
136
|
+
original_text: str,
|
|
137
|
+
chat_service: ChatService,
|
|
138
|
+
log: logging.LoggerAdapter[logging.Logger],
|
|
139
|
+
min_publish_interval: float = 3.0,
|
|
140
|
+
) -> None:
|
|
141
|
+
self._states: dict[str, _FileState] = {f: _FileState() for f in filenames}
|
|
142
|
+
self._original_text = original_text
|
|
143
|
+
self._chat_service = chat_service
|
|
144
|
+
self._log = log
|
|
145
|
+
self._lock = asyncio.Lock()
|
|
146
|
+
self._last_publish_time = 0.0
|
|
147
|
+
self._min_interval = min_publish_interval
|
|
148
|
+
|
|
149
|
+
async def update(
|
|
150
|
+
self,
|
|
151
|
+
filename: str,
|
|
152
|
+
phase: str,
|
|
153
|
+
*,
|
|
154
|
+
percent: int | None = None,
|
|
155
|
+
elapsed_seconds: float = 0.0,
|
|
156
|
+
retry_attempt: int = 0,
|
|
157
|
+
max_retries: int = 0,
|
|
158
|
+
force_publish: bool = False,
|
|
159
|
+
) -> None:
|
|
160
|
+
async with self._lock:
|
|
161
|
+
state = self._states.get(filename)
|
|
162
|
+
if state is None:
|
|
163
|
+
return
|
|
164
|
+
state.phase = phase
|
|
165
|
+
state.percent = percent
|
|
166
|
+
state.elapsed_seconds = elapsed_seconds
|
|
167
|
+
state.retry_attempt = retry_attempt
|
|
168
|
+
state.max_retries = max_retries
|
|
169
|
+
|
|
170
|
+
now = time.monotonic()
|
|
171
|
+
should_publish = (
|
|
172
|
+
force_publish
|
|
173
|
+
or phase in ("done", "failed", "uploading")
|
|
174
|
+
or now - self._last_publish_time >= self._min_interval
|
|
175
|
+
)
|
|
176
|
+
if should_publish:
|
|
177
|
+
await self._publish()
|
|
178
|
+
self._last_publish_time = now
|
|
179
|
+
|
|
180
|
+
async def publish_initial(self) -> None:
|
|
181
|
+
"""Send the first progress update (marks all files as pending)."""
|
|
182
|
+
async with self._lock:
|
|
183
|
+
for state in self._states.values():
|
|
184
|
+
state.phase = "downloading"
|
|
185
|
+
await self._publish()
|
|
186
|
+
self._last_publish_time = time.monotonic()
|
|
187
|
+
|
|
188
|
+
async def _publish(self) -> None:
|
|
189
|
+
text = self._build_progress_text()
|
|
190
|
+
try:
|
|
191
|
+
await self._chat_service.modify_assistant_message_async(content=text)
|
|
192
|
+
except Exception:
|
|
193
|
+
self._log.debug("Failed to publish progress update", exc_info=True)
|
|
194
|
+
|
|
195
|
+
def _build_progress_text(self) -> str:
|
|
196
|
+
text = self._original_text
|
|
197
|
+
|
|
198
|
+
for filename, state in self._states.items():
|
|
199
|
+
if state.phase == "pending":
|
|
200
|
+
continue
|
|
201
|
+
progress = self._format_inline(filename, state)
|
|
202
|
+
pattern = rf"!?\[.*?\]\(sandbox:/mnt/data/{re.escape(filename)}\)"
|
|
203
|
+
text = re.sub(pattern, progress, text)
|
|
204
|
+
|
|
205
|
+
active = {
|
|
206
|
+
f: s for f, s in self._states.items() if s.phase not in ("done", "pending")
|
|
207
|
+
}
|
|
208
|
+
if active:
|
|
209
|
+
lines = ["---", "Preparing files:"]
|
|
210
|
+
for filename, state in active.items():
|
|
211
|
+
lines.append(f"- {filename} — {self._format_summary(state)}")
|
|
212
|
+
text = text.rstrip() + "\n\n" + "\n".join(lines)
|
|
213
|
+
|
|
214
|
+
return text
|
|
215
|
+
|
|
216
|
+
@staticmethod
|
|
217
|
+
def _format_inline(filename: str, state: _FileState) -> str:
|
|
218
|
+
if state.phase == "downloading":
|
|
219
|
+
base = f"Downloading {filename}..."
|
|
220
|
+
if state.retry_attempt > 0:
|
|
221
|
+
base += f" retry {state.retry_attempt}/{state.max_retries}"
|
|
222
|
+
if state.percent is not None:
|
|
223
|
+
return f"{base} {state.percent}%"
|
|
224
|
+
if state.elapsed_seconds > 0:
|
|
225
|
+
return f"{base} ({int(state.elapsed_seconds)}s)"
|
|
226
|
+
return base
|
|
227
|
+
if state.phase == "uploading":
|
|
228
|
+
return f"Uploading {filename}..."
|
|
229
|
+
if state.phase == "failed":
|
|
230
|
+
return "File could not be generated. Please try again."
|
|
231
|
+
return filename
|
|
232
|
+
|
|
233
|
+
@staticmethod
|
|
234
|
+
def _format_summary(state: _FileState) -> str:
|
|
235
|
+
if state.phase == "downloading":
|
|
236
|
+
base = "Downloading"
|
|
237
|
+
if state.retry_attempt > 0:
|
|
238
|
+
base += f" (retry {state.retry_attempt}/{state.max_retries})"
|
|
239
|
+
if state.percent is not None:
|
|
240
|
+
return f"{base} {state.percent}%"
|
|
241
|
+
if state.elapsed_seconds > 0:
|
|
242
|
+
return f"{base} ({int(state.elapsed_seconds)}s)"
|
|
243
|
+
return f"{base}..."
|
|
244
|
+
if state.phase == "uploading":
|
|
245
|
+
return "Uploading..."
|
|
246
|
+
if state.phase == "failed":
|
|
247
|
+
return "Failed"
|
|
248
|
+
return "Pending"
|
|
249
|
+
|
|
250
|
+
|
|
106
251
|
class DisplayCodeInterpreterFilesPostProcessor(
|
|
107
252
|
ResponsesApiPostprocessor,
|
|
108
253
|
):
|
|
@@ -182,10 +327,21 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
182
327
|
)
|
|
183
328
|
self._content_map = {}
|
|
184
329
|
|
|
330
|
+
tracker: _FileProgressTracker | None = None
|
|
331
|
+
if container_files and self._chat_service is not None:
|
|
332
|
+
tracker = _FileProgressTracker(
|
|
333
|
+
filenames=[cf.filename for cf in container_files],
|
|
334
|
+
original_text=loop_response.message.text or "",
|
|
335
|
+
chat_service=self._chat_service,
|
|
336
|
+
log=self._log,
|
|
337
|
+
min_publish_interval=self._config.progress_update_interval,
|
|
338
|
+
)
|
|
339
|
+
await tracker.publish_initial()
|
|
340
|
+
|
|
185
341
|
semaphore = asyncio.Semaphore(self._config.max_concurrent_file_downloads)
|
|
186
342
|
tasks = [
|
|
187
343
|
self._download_and_upload_container_files_to_knowledge_base(
|
|
188
|
-
citation, semaphore
|
|
344
|
+
citation, semaphore, tracker
|
|
189
345
|
)
|
|
190
346
|
for citation in container_files
|
|
191
347
|
]
|
|
@@ -195,6 +351,8 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
195
351
|
self._content_map[citation.filename] = (
|
|
196
352
|
result.content_id if result is not None else None
|
|
197
353
|
)
|
|
354
|
+
if result is None and tracker:
|
|
355
|
+
await tracker.update(citation.filename, "failed", force_publish=True)
|
|
198
356
|
|
|
199
357
|
succeeded = {f: cid for f, cid in self._content_map.items() if cid is not None}
|
|
200
358
|
failed = [f for f, cid in self._content_map.items() if cid is None]
|
|
@@ -411,6 +569,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
411
569
|
self,
|
|
412
570
|
container_file: AnnotationContainerFileCitation,
|
|
413
571
|
semaphore: asyncio.Semaphore,
|
|
572
|
+
tracker: _FileProgressTracker | None = None,
|
|
414
573
|
) -> _ContentInfo | None:
|
|
415
574
|
async with semaphore:
|
|
416
575
|
self._log.info(
|
|
@@ -419,18 +578,22 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
419
578
|
container_file.container_id,
|
|
420
579
|
container_file.file_id,
|
|
421
580
|
)
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
container_id=container_file.container_id,
|
|
426
|
-
file_id=container_file.file_id,
|
|
581
|
+
|
|
582
|
+
file_bytes = await self._download_file_bytes_with_progress(
|
|
583
|
+
container_file, tracker
|
|
427
584
|
)
|
|
585
|
+
|
|
428
586
|
self._log.info(
|
|
429
587
|
"Downloaded container file '%s' (%d bytes)",
|
|
430
588
|
container_file.filename,
|
|
431
|
-
len(
|
|
589
|
+
len(file_bytes),
|
|
432
590
|
)
|
|
433
591
|
|
|
592
|
+
if tracker:
|
|
593
|
+
await tracker.update(
|
|
594
|
+
container_file.filename, "uploading", force_publish=True
|
|
595
|
+
)
|
|
596
|
+
|
|
434
597
|
mime = guess_type(container_file.filename)[0] or "text/plain"
|
|
435
598
|
self._log.info(
|
|
436
599
|
"Uploading '%s' to knowledge base (mime=%s)",
|
|
@@ -441,13 +604,18 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
441
604
|
assert self._chat_service is not None # Checked in __init__
|
|
442
605
|
content = await self._build_retry()(
|
|
443
606
|
self._chat_service.upload_to_chat_from_bytes_async,
|
|
444
|
-
content=
|
|
607
|
+
content=file_bytes,
|
|
445
608
|
content_name=container_file.filename,
|
|
446
609
|
mime_type=mime,
|
|
447
610
|
skip_ingestion=True,
|
|
448
611
|
hide_in_chat=True,
|
|
449
612
|
)
|
|
450
613
|
|
|
614
|
+
if tracker:
|
|
615
|
+
await tracker.update(
|
|
616
|
+
container_file.filename, "done", force_publish=True
|
|
617
|
+
)
|
|
618
|
+
|
|
451
619
|
self._log.info(
|
|
452
620
|
"Uploaded '%s' — content_id=%s",
|
|
453
621
|
container_file.filename,
|
|
@@ -455,6 +623,96 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
455
623
|
)
|
|
456
624
|
return _ContentInfo(filename=container_file.filename, content_id=content.id)
|
|
457
625
|
|
|
626
|
+
async def _download_file_bytes_with_progress(
|
|
627
|
+
self,
|
|
628
|
+
container_file: AnnotationContainerFileCitation,
|
|
629
|
+
tracker: _FileProgressTracker | None,
|
|
630
|
+
) -> bytes:
|
|
631
|
+
"""Download container file with streaming progress and manual retry loop.
|
|
632
|
+
|
|
633
|
+
Uses ``with_streaming_response`` so we can read ``content-length``
|
|
634
|
+
and report download percentage. Falls back to elapsed-time display
|
|
635
|
+
when the header is absent.
|
|
636
|
+
"""
|
|
637
|
+
max_attempts = 1 + self._config.max_download_retries
|
|
638
|
+
download_start = time.monotonic()
|
|
639
|
+
last_exception: Exception | None = None
|
|
640
|
+
|
|
641
|
+
for attempt_num in range(1, max_attempts + 1):
|
|
642
|
+
retry_num = attempt_num - 1
|
|
643
|
+
try:
|
|
644
|
+
if retry_num > 0:
|
|
645
|
+
delay = self._config.download_retry_base_delay * (2**retry_num)
|
|
646
|
+
self._log.warning(
|
|
647
|
+
"Retrying download of '%s' (attempt %d/%d) after %.1fs",
|
|
648
|
+
container_file.filename,
|
|
649
|
+
attempt_num,
|
|
650
|
+
max_attempts,
|
|
651
|
+
delay,
|
|
652
|
+
)
|
|
653
|
+
if tracker:
|
|
654
|
+
await tracker.update(
|
|
655
|
+
container_file.filename,
|
|
656
|
+
"downloading",
|
|
657
|
+
elapsed_seconds=time.monotonic() - download_start,
|
|
658
|
+
retry_attempt=retry_num,
|
|
659
|
+
max_retries=self._config.max_download_retries,
|
|
660
|
+
force_publish=True,
|
|
661
|
+
)
|
|
662
|
+
await asyncio.sleep(delay)
|
|
663
|
+
|
|
664
|
+
return await self._stream_download_bytes(
|
|
665
|
+
container_file, tracker, retry_num, download_start
|
|
666
|
+
)
|
|
667
|
+
except Exception as exc:
|
|
668
|
+
last_exception = exc
|
|
669
|
+
self._log.warning(
|
|
670
|
+
"Download attempt %d/%d failed for '%s': %s",
|
|
671
|
+
attempt_num,
|
|
672
|
+
max_attempts,
|
|
673
|
+
container_file.filename,
|
|
674
|
+
exc,
|
|
675
|
+
)
|
|
676
|
+
|
|
677
|
+
assert last_exception is not None
|
|
678
|
+
raise last_exception
|
|
679
|
+
|
|
680
|
+
async def _stream_download_bytes(
|
|
681
|
+
self,
|
|
682
|
+
container_file: AnnotationContainerFileCitation,
|
|
683
|
+
tracker: _FileProgressTracker | None,
|
|
684
|
+
retry_attempt: int,
|
|
685
|
+
download_start: float,
|
|
686
|
+
) -> bytes:
|
|
687
|
+
"""Stream-download a single container file, reporting chunk-level progress."""
|
|
688
|
+
async with (
|
|
689
|
+
self._client.containers.files.content.with_streaming_response.retrieve(
|
|
690
|
+
file_id=container_file.file_id,
|
|
691
|
+
container_id=container_file.container_id,
|
|
692
|
+
) as response
|
|
693
|
+
):
|
|
694
|
+
content_length = response.headers.get("content-length")
|
|
695
|
+
total = int(content_length) if content_length else None
|
|
696
|
+
chunks: list[bytes] = []
|
|
697
|
+
downloaded = 0
|
|
698
|
+
async for chunk in response.iter_bytes(
|
|
699
|
+
chunk_size=self._config.download_chunk_size
|
|
700
|
+
):
|
|
701
|
+
chunks.append(chunk)
|
|
702
|
+
downloaded += len(chunk)
|
|
703
|
+
if tracker:
|
|
704
|
+
pct = (downloaded * 100 // total) if total else None
|
|
705
|
+
elapsed = time.monotonic() - download_start
|
|
706
|
+
await tracker.update(
|
|
707
|
+
container_file.filename,
|
|
708
|
+
"downloading",
|
|
709
|
+
percent=pct,
|
|
710
|
+
elapsed_seconds=elapsed,
|
|
711
|
+
retry_attempt=retry_attempt,
|
|
712
|
+
max_retries=self._config.max_download_retries,
|
|
713
|
+
)
|
|
714
|
+
return b"".join(chunks)
|
|
715
|
+
|
|
458
716
|
async def _load_previous_files(self) -> dict[str, str]:
|
|
459
717
|
if self._short_term_memory_manager is None:
|
|
460
718
|
return {}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/README.md
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/__init__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/__main__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/cli.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/differ.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/exporter.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/models.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/registry.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/config_checker/validator.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/default_language_model.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/docx_generator/__init__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/docx_generator/config.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/docx_generator/schemas.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/docx_generator/service.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/endpoint_builder.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/endpoint_requestor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/feature_flags/schema.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/pydantic/rjsf_tags.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/pydantic_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/string_utilities.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/tests/test_referencing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/token/token_counting.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/utils/image/encode.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/utils/jinja/helpers.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/utils/jinja/render.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/utils/jinja/schema.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/utils/jinja/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/_common/validate_required_values.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/exception.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.10 → unique_toolkit-1.68.11}/unique_toolkit/agentic/evaluation/output_parser.py
RENAMED
|
File without changes
|