unique_toolkit 1.68.11__tar.gz → 1.68.12__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.11 → unique_toolkit-1.68.12}/PKG-INFO +1 -1
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/pyproject.toml +1 -1
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +22 -2
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +167 -47
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/README.md +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/services/chat_service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/services/factory.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/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.12
|
|
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>
|
|
@@ -85,7 +85,17 @@ class PersistentShortMemoryManager(Generic[TSchema]):
|
|
|
85
85
|
self._short_term_memory_name,
|
|
86
86
|
)
|
|
87
87
|
|
|
88
|
-
|
|
88
|
+
if not result.success:
|
|
89
|
+
self._log_not_found()
|
|
90
|
+
if result.exception is not None:
|
|
91
|
+
logger.warning(
|
|
92
|
+
"Short term memory lookup failed with %s: %s",
|
|
93
|
+
type(result.exception).__name__,
|
|
94
|
+
result.exception,
|
|
95
|
+
exc_info=result.exception,
|
|
96
|
+
)
|
|
97
|
+
else:
|
|
98
|
+
self._log_found()
|
|
89
99
|
|
|
90
100
|
return result.unpack(default=None)
|
|
91
101
|
|
|
@@ -95,7 +105,17 @@ class PersistentShortMemoryManager(Generic[TSchema]):
|
|
|
95
105
|
self._short_term_memory_name,
|
|
96
106
|
)
|
|
97
107
|
|
|
98
|
-
|
|
108
|
+
if not result.success:
|
|
109
|
+
self._log_not_found()
|
|
110
|
+
if result.exception is not None:
|
|
111
|
+
logger.warning(
|
|
112
|
+
"Short term memory lookup failed with %s: %s",
|
|
113
|
+
type(result.exception).__name__,
|
|
114
|
+
result.exception,
|
|
115
|
+
exc_info=result.exception,
|
|
116
|
+
)
|
|
117
|
+
else:
|
|
118
|
+
self._log_found()
|
|
99
119
|
|
|
100
120
|
return result.unpack(default=None)
|
|
101
121
|
|
|
@@ -7,6 +7,7 @@ from dataclasses import dataclass
|
|
|
7
7
|
from mimetypes import guess_type
|
|
8
8
|
from typing import NamedTuple, override
|
|
9
9
|
|
|
10
|
+
import httpx
|
|
10
11
|
from openai import AsyncOpenAI
|
|
11
12
|
from openai.types.responses import ResponseCodeInterpreterToolCall
|
|
12
13
|
from openai.types.responses.response_output_text import AnnotationContainerFileCitation
|
|
@@ -86,6 +87,12 @@ class DisplayCodeInterpreterFilesPostProcessorConfig(BaseModel):
|
|
|
86
87
|
default=8192,
|
|
87
88
|
description="Chunk size in bytes for streaming container file downloads.",
|
|
88
89
|
)
|
|
90
|
+
download_read_timeout: float = Field(
|
|
91
|
+
default=120.0,
|
|
92
|
+
description="HTTP read timeout in seconds for container file downloads. "
|
|
93
|
+
"Applies per SDK attempt. The OpenAI SDK default of 600s is too generous "
|
|
94
|
+
"for small generated files; a shorter timeout lets us retry sooner.",
|
|
95
|
+
)
|
|
89
96
|
|
|
90
97
|
|
|
91
98
|
class _ContentInfo(NamedTuple):
|
|
@@ -177,6 +184,22 @@ class _FileProgressTracker:
|
|
|
177
184
|
await self._publish()
|
|
178
185
|
self._last_publish_time = now
|
|
179
186
|
|
|
187
|
+
async def tick_elapsed(self, filename: str, elapsed_seconds: float) -> None:
|
|
188
|
+
"""Publish an elapsed-time update without changing percent or retry state.
|
|
189
|
+
|
|
190
|
+
Used by the background ticker to show time-based progress while the
|
|
191
|
+
OpenAI API hasn't started returning bytes yet.
|
|
192
|
+
"""
|
|
193
|
+
async with self._lock:
|
|
194
|
+
state = self._states.get(filename)
|
|
195
|
+
if state is None or state.phase != "downloading":
|
|
196
|
+
return
|
|
197
|
+
state.elapsed_seconds = elapsed_seconds
|
|
198
|
+
now = time.monotonic()
|
|
199
|
+
if now - self._last_publish_time >= self._min_interval:
|
|
200
|
+
await self._publish()
|
|
201
|
+
self._last_publish_time = now
|
|
202
|
+
|
|
180
203
|
async def publish_initial(self) -> None:
|
|
181
204
|
"""Send the first progress update (marks all files as pending)."""
|
|
182
205
|
async with self._lock:
|
|
@@ -303,6 +326,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
303
326
|
|
|
304
327
|
@override
|
|
305
328
|
async def run(self, loop_response: ResponsesLanguageModelStreamResponse) -> None:
|
|
329
|
+
run_t0 = time.monotonic()
|
|
306
330
|
self._log.info("run() started — fetching and uploading code interpreter files")
|
|
307
331
|
|
|
308
332
|
container_files = loop_response.container_files
|
|
@@ -312,6 +336,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
312
336
|
[cf.filename for cf in container_files],
|
|
313
337
|
)
|
|
314
338
|
|
|
339
|
+
phase_t0 = time.monotonic()
|
|
315
340
|
try:
|
|
316
341
|
self._content_map: dict[str, str | None] = await self._load_previous_files() # type: ignore
|
|
317
342
|
if self._content_map:
|
|
@@ -326,6 +351,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
326
351
|
"proceeding without previous file context."
|
|
327
352
|
)
|
|
328
353
|
self._content_map = {}
|
|
354
|
+
load_ms = (time.monotonic() - phase_t0) * 1000
|
|
329
355
|
|
|
330
356
|
tracker: _FileProgressTracker | None = None
|
|
331
357
|
if container_files and self._chat_service is not None:
|
|
@@ -338,6 +364,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
338
364
|
)
|
|
339
365
|
await tracker.publish_initial()
|
|
340
366
|
|
|
367
|
+
phase_t0 = time.monotonic()
|
|
341
368
|
semaphore = asyncio.Semaphore(self._config.max_concurrent_file_downloads)
|
|
342
369
|
tasks = [
|
|
343
370
|
self._download_and_upload_container_files_to_knowledge_base(
|
|
@@ -346,6 +373,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
346
373
|
for citation in container_files
|
|
347
374
|
]
|
|
348
375
|
results = await asyncio.gather(*tasks)
|
|
376
|
+
download_upload_ms = (time.monotonic() - phase_t0) * 1000
|
|
349
377
|
|
|
350
378
|
for citation, result in zip(container_files, results):
|
|
351
379
|
self._content_map[citation.filename] = (
|
|
@@ -365,6 +393,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
365
393
|
failed,
|
|
366
394
|
)
|
|
367
395
|
|
|
396
|
+
phase_t0 = time.monotonic()
|
|
368
397
|
try:
|
|
369
398
|
await self._save_generated_files(
|
|
370
399
|
[
|
|
@@ -378,7 +407,9 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
378
407
|
"run() failed to save generated files to short-term memory; "
|
|
379
408
|
"file replacement will still proceed."
|
|
380
409
|
)
|
|
410
|
+
save_ms = (time.monotonic() - phase_t0) * 1000
|
|
381
411
|
|
|
412
|
+
phase_t0 = time.monotonic()
|
|
382
413
|
try:
|
|
383
414
|
if feature_flags.enable_code_execution_fence_un_17972.is_enabled(
|
|
384
415
|
self._company_id
|
|
@@ -399,18 +430,28 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
399
430
|
"file replacement will still proceed."
|
|
400
431
|
)
|
|
401
432
|
self._orphan_code_blocks = []
|
|
433
|
+
orphan_ms = (time.monotonic() - phase_t0) * 1000
|
|
402
434
|
|
|
435
|
+
total_ms = (time.monotonic() - run_t0) * 1000
|
|
403
436
|
self._log.info(
|
|
404
|
-
"run() finished — content_map has %d entries (%d
|
|
437
|
+
"run() finished — content_map has %d entries (%d ok, %d failed). "
|
|
438
|
+
"Timing: total=%.0fms, load_stm=%.0fms, download_upload=%.0fms, "
|
|
439
|
+
"save_stm=%.0fms, orphan=%.0fms",
|
|
405
440
|
len(self._content_map),
|
|
406
441
|
len(succeeded),
|
|
407
442
|
len(failed),
|
|
443
|
+
total_ms,
|
|
444
|
+
load_ms,
|
|
445
|
+
download_upload_ms,
|
|
446
|
+
save_ms,
|
|
447
|
+
orphan_ms,
|
|
408
448
|
)
|
|
409
449
|
|
|
410
450
|
@override
|
|
411
451
|
def apply_postprocessing_to_response(
|
|
412
452
|
self, loop_response: ResponsesLanguageModelStreamResponse
|
|
413
453
|
) -> bool:
|
|
454
|
+
apply_t0 = time.monotonic()
|
|
414
455
|
self._log.info(
|
|
415
456
|
"apply_postprocessing started — %d file(s) in content_map, fence_ff=%s",
|
|
416
457
|
len(self._content_map),
|
|
@@ -548,14 +589,16 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
548
589
|
"apply_postprocessing found and replaced dangling sandbox links"
|
|
549
590
|
)
|
|
550
591
|
|
|
592
|
+
apply_ms = (time.monotonic() - apply_t0) * 1000
|
|
551
593
|
self._log.info(
|
|
552
594
|
"apply_postprocessing finished — changed=%s, replaced=%d, missed=%d, "
|
|
553
|
-
"error=%d, dangling_cleaned=%s",
|
|
595
|
+
"error=%d, dangling_cleaned=%s (%.0fms)",
|
|
554
596
|
changed,
|
|
555
597
|
len(replaced_files),
|
|
556
598
|
len(missed_files),
|
|
557
599
|
len(error_files),
|
|
558
600
|
dangling_replaced,
|
|
601
|
+
apply_ms,
|
|
559
602
|
)
|
|
560
603
|
|
|
561
604
|
return changed
|
|
@@ -572,6 +615,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
572
615
|
tracker: _FileProgressTracker | None = None,
|
|
573
616
|
) -> _ContentInfo | None:
|
|
574
617
|
async with semaphore:
|
|
618
|
+
pipeline_t0 = time.monotonic()
|
|
575
619
|
self._log.info(
|
|
576
620
|
"Downloading container file '%s' (container=%s, file_id=%s)",
|
|
577
621
|
container_file.filename,
|
|
@@ -579,14 +623,17 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
579
623
|
container_file.file_id,
|
|
580
624
|
)
|
|
581
625
|
|
|
626
|
+
download_t0 = time.monotonic()
|
|
582
627
|
file_bytes = await self._download_file_bytes_with_progress(
|
|
583
628
|
container_file, tracker
|
|
584
629
|
)
|
|
630
|
+
download_ms = (time.monotonic() - download_t0) * 1000
|
|
585
631
|
|
|
586
632
|
self._log.info(
|
|
587
|
-
"Downloaded container file '%s' (%d bytes)",
|
|
633
|
+
"Downloaded container file '%s' (%d bytes, %.0fms)",
|
|
588
634
|
container_file.filename,
|
|
589
635
|
len(file_bytes),
|
|
636
|
+
download_ms,
|
|
590
637
|
)
|
|
591
638
|
|
|
592
639
|
if tracker:
|
|
@@ -596,12 +643,14 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
596
643
|
|
|
597
644
|
mime = guess_type(container_file.filename)[0] or "text/plain"
|
|
598
645
|
self._log.info(
|
|
599
|
-
"Uploading '%s' to knowledge base (mime=%s)",
|
|
646
|
+
"Uploading '%s' to knowledge base (mime=%s, %d bytes)",
|
|
600
647
|
container_file.filename,
|
|
601
648
|
mime,
|
|
649
|
+
len(file_bytes),
|
|
602
650
|
)
|
|
603
651
|
|
|
604
652
|
assert self._chat_service is not None # Checked in __init__
|
|
653
|
+
upload_t0 = time.monotonic()
|
|
605
654
|
content = await self._build_retry()(
|
|
606
655
|
self._chat_service.upload_to_chat_from_bytes_async,
|
|
607
656
|
content=file_bytes,
|
|
@@ -610,16 +659,22 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
610
659
|
skip_ingestion=True,
|
|
611
660
|
hide_in_chat=True,
|
|
612
661
|
)
|
|
662
|
+
upload_ms = (time.monotonic() - upload_t0) * 1000
|
|
613
663
|
|
|
614
664
|
if tracker:
|
|
615
665
|
await tracker.update(
|
|
616
666
|
container_file.filename, "done", force_publish=True
|
|
617
667
|
)
|
|
618
668
|
|
|
669
|
+
pipeline_ms = (time.monotonic() - pipeline_t0) * 1000
|
|
619
670
|
self._log.info(
|
|
620
|
-
"Uploaded '%s' — content_id=%s"
|
|
671
|
+
"Uploaded '%s' — content_id=%s. "
|
|
672
|
+
"Timing: download=%.0fms, upload=%.0fms, pipeline=%.0fms",
|
|
621
673
|
container_file.filename,
|
|
622
674
|
content.id,
|
|
675
|
+
download_ms,
|
|
676
|
+
upload_ms,
|
|
677
|
+
pipeline_ms,
|
|
623
678
|
)
|
|
624
679
|
return _ContentInfo(filename=container_file.filename, content_id=content.id)
|
|
625
680
|
|
|
@@ -633,49 +688,78 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
633
688
|
Uses ``with_streaming_response`` so we can read ``content-length``
|
|
634
689
|
and report download percentage. Falls back to elapsed-time display
|
|
635
690
|
when the header is absent.
|
|
691
|
+
|
|
692
|
+
A background ticker task publishes elapsed-time updates at regular
|
|
693
|
+
intervals even when the OpenAI API is slow to return the first byte.
|
|
636
694
|
"""
|
|
637
695
|
max_attempts = 1 + self._config.max_download_retries
|
|
638
696
|
download_start = time.monotonic()
|
|
639
697
|
last_exception: Exception | None = None
|
|
640
698
|
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
self.
|
|
647
|
-
|
|
699
|
+
ticker_task: asyncio.Task[None] | None = None
|
|
700
|
+
if tracker:
|
|
701
|
+
|
|
702
|
+
async def _ticker() -> None:
|
|
703
|
+
while True:
|
|
704
|
+
await asyncio.sleep(self._config.progress_update_interval)
|
|
705
|
+
elapsed = time.monotonic() - download_start
|
|
706
|
+
self._log.info(
|
|
707
|
+
"Still downloading '%s' (%.0fs elapsed)",
|
|
648
708
|
container_file.filename,
|
|
649
|
-
|
|
650
|
-
max_attempts,
|
|
651
|
-
delay,
|
|
709
|
+
elapsed,
|
|
652
710
|
)
|
|
653
|
-
|
|
654
|
-
|
|
711
|
+
await tracker.tick_elapsed(container_file.filename, elapsed)
|
|
712
|
+
|
|
713
|
+
ticker_task = asyncio.create_task(_ticker())
|
|
714
|
+
|
|
715
|
+
try:
|
|
716
|
+
for attempt_num in range(1, max_attempts + 1):
|
|
717
|
+
retry_num = attempt_num - 1
|
|
718
|
+
try:
|
|
719
|
+
if retry_num > 0:
|
|
720
|
+
delay = self._config.download_retry_base_delay * (
|
|
721
|
+
2 ** (retry_num - 1)
|
|
722
|
+
)
|
|
723
|
+
self._log.warning(
|
|
724
|
+
"Retrying download of '%s' (attempt %d/%d) after %.1fs",
|
|
655
725
|
container_file.filename,
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
max_retries=self._config.max_download_retries,
|
|
660
|
-
force_publish=True,
|
|
726
|
+
attempt_num,
|
|
727
|
+
max_attempts,
|
|
728
|
+
delay,
|
|
661
729
|
)
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
730
|
+
if tracker:
|
|
731
|
+
await tracker.update(
|
|
732
|
+
container_file.filename,
|
|
733
|
+
"downloading",
|
|
734
|
+
elapsed_seconds=time.monotonic() - download_start,
|
|
735
|
+
retry_attempt=retry_num,
|
|
736
|
+
max_retries=self._config.max_download_retries,
|
|
737
|
+
force_publish=True,
|
|
738
|
+
)
|
|
739
|
+
await asyncio.sleep(delay)
|
|
740
|
+
|
|
741
|
+
return await self._stream_download_bytes(
|
|
742
|
+
container_file, tracker, retry_num, download_start
|
|
743
|
+
)
|
|
744
|
+
except Exception as exc:
|
|
745
|
+
last_exception = exc
|
|
746
|
+
self._log.warning(
|
|
747
|
+
"Download attempt %d/%d failed for '%s': %s",
|
|
748
|
+
attempt_num,
|
|
749
|
+
max_attempts,
|
|
750
|
+
container_file.filename,
|
|
751
|
+
exc,
|
|
752
|
+
)
|
|
676
753
|
|
|
677
|
-
|
|
678
|
-
|
|
754
|
+
assert last_exception is not None
|
|
755
|
+
raise last_exception
|
|
756
|
+
finally:
|
|
757
|
+
if ticker_task is not None:
|
|
758
|
+
ticker_task.cancel()
|
|
759
|
+
try:
|
|
760
|
+
await ticker_task
|
|
761
|
+
except BaseException:
|
|
762
|
+
pass
|
|
679
763
|
|
|
680
764
|
async def _stream_download_bytes(
|
|
681
765
|
self,
|
|
@@ -684,13 +768,30 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
684
768
|
retry_attempt: int,
|
|
685
769
|
download_start: float,
|
|
686
770
|
) -> bytes:
|
|
687
|
-
"""Stream-download a single container file, reporting chunk-level progress.
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
771
|
+
"""Stream-download a single container file, reporting chunk-level progress.
|
|
772
|
+
|
|
773
|
+
SDK-level retries are disabled (``max_retries=0``) so that only our
|
|
774
|
+
manual retry loop retries, with full visibility in logs and progress
|
|
775
|
+
tracker. A shorter read timeout avoids waiting 10 minutes on a
|
|
776
|
+
stalled connection.
|
|
777
|
+
"""
|
|
778
|
+
t0 = time.monotonic()
|
|
779
|
+
async with self._client.with_options(
|
|
780
|
+
max_retries=0,
|
|
781
|
+
timeout=httpx.Timeout(5.0, read=self._config.download_read_timeout),
|
|
782
|
+
).containers.files.content.with_streaming_response.retrieve(
|
|
783
|
+
file_id=container_file.file_id,
|
|
784
|
+
container_id=container_file.container_id,
|
|
785
|
+
) as response:
|
|
786
|
+
first_byte_ms = (time.monotonic() - t0) * 1000
|
|
787
|
+
self._log.info(
|
|
788
|
+
"Stream opened for '%s' — first-byte latency=%.0fms, "
|
|
789
|
+
"content-length=%s, status=%s",
|
|
790
|
+
container_file.filename,
|
|
791
|
+
first_byte_ms,
|
|
792
|
+
response.headers.get("content-length", "unknown"),
|
|
793
|
+
response.status_code,
|
|
794
|
+
)
|
|
694
795
|
content_length = response.headers.get("content-length")
|
|
695
796
|
total = int(content_length) if content_length else None
|
|
696
797
|
chunks: list[bytes] = []
|
|
@@ -711,6 +812,13 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
711
812
|
retry_attempt=retry_attempt,
|
|
712
813
|
max_retries=self._config.max_download_retries,
|
|
713
814
|
)
|
|
815
|
+
transfer_ms = (time.monotonic() - t0) * 1000 - first_byte_ms
|
|
816
|
+
self._log.info(
|
|
817
|
+
"Stream complete for '%s' — transfer=%.0fms, total=%d bytes",
|
|
818
|
+
container_file.filename,
|
|
819
|
+
transfer_ms,
|
|
820
|
+
downloaded,
|
|
821
|
+
)
|
|
714
822
|
return b"".join(chunks)
|
|
715
823
|
|
|
716
824
|
async def _load_previous_files(self) -> dict[str, str]:
|
|
@@ -720,16 +828,22 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
720
828
|
self._log.info(
|
|
721
829
|
"Loading previously generated code interpreter files from short term memory"
|
|
722
830
|
)
|
|
831
|
+
t0 = time.monotonic()
|
|
723
832
|
memory = await self._short_term_memory_manager.load_async()
|
|
833
|
+
elapsed_ms = (time.monotonic() - t0) * 1000
|
|
724
834
|
|
|
725
835
|
if memory is None:
|
|
726
836
|
self._log.info(
|
|
727
|
-
"No previously generated code interpreter files found
|
|
837
|
+
"No previously generated code interpreter files found "
|
|
838
|
+
"in short term memory (%.0fms)",
|
|
839
|
+
elapsed_ms,
|
|
728
840
|
)
|
|
729
841
|
return {}
|
|
730
842
|
|
|
731
843
|
self._log.info(
|
|
732
|
-
"Found %s previously generated code interpreter files
|
|
844
|
+
"Found %s previously generated code interpreter files (%.0fms)",
|
|
845
|
+
len(memory.root),
|
|
846
|
+
elapsed_ms,
|
|
733
847
|
)
|
|
734
848
|
|
|
735
849
|
return {content.filename: content.content_id for content in memory.root}
|
|
@@ -738,9 +852,15 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
738
852
|
if self._short_term_memory_manager is None or len(content_infos) == 0:
|
|
739
853
|
return
|
|
740
854
|
|
|
855
|
+
t0 = time.monotonic()
|
|
741
856
|
await self._short_term_memory_manager.save_async(
|
|
742
857
|
_DisplayedFilesShortTermMemorySchema(root=content_infos)
|
|
743
858
|
)
|
|
859
|
+
self._log.info(
|
|
860
|
+
"Saved %d generated file(s) to short term memory (%.0fms)",
|
|
861
|
+
len(content_infos),
|
|
862
|
+
(time.monotonic() - t0) * 1000,
|
|
863
|
+
)
|
|
744
864
|
|
|
745
865
|
async def _upload_orphan_code_as_txt(
|
|
746
866
|
self, loop_response: ResponsesLanguageModelStreamResponse
|
|
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.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/README.md
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/__init__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/__main__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/cli.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/differ.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/exporter.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/models.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/registry.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/config_checker/validator.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/default_language_model.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/docx_generator/__init__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/docx_generator/config.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/docx_generator/schemas.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/docx_generator/service.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/endpoint_builder.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/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.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/feature_flags/schema.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/pydantic/rjsf_tags.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/pydantic_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/string_utilities.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.12}/unique_toolkit/_common/tests/test_referencing.py
RENAMED
|
File without changes
|