unique_toolkit 1.68.11__tar.gz → 1.68.13__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.13}/PKG-INFO +1 -1
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/pyproject.toml +1 -1
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +22 -2
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +251 -47
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/README.md +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/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.13}/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.13}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/services/chat_service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/services/factory.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/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.13
|
|
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):
|
|
@@ -157,7 +164,9 @@ class _FileProgressTracker:
|
|
|
157
164
|
max_retries: int = 0,
|
|
158
165
|
force_publish: bool = False,
|
|
159
166
|
) -> None:
|
|
167
|
+
lock_wait_t0 = time.monotonic()
|
|
160
168
|
async with self._lock:
|
|
169
|
+
lock_wait_ms = (time.monotonic() - lock_wait_t0) * 1000
|
|
161
170
|
state = self._states.get(filename)
|
|
162
171
|
if state is None:
|
|
163
172
|
return
|
|
@@ -174,8 +183,70 @@ class _FileProgressTracker:
|
|
|
174
183
|
or now - self._last_publish_time >= self._min_interval
|
|
175
184
|
)
|
|
176
185
|
if should_publish:
|
|
186
|
+
publish_t0 = time.monotonic()
|
|
177
187
|
await self._publish()
|
|
188
|
+
publish_ms = (time.monotonic() - publish_t0) * 1000
|
|
178
189
|
self._last_publish_time = now
|
|
190
|
+
if lock_wait_ms > 100 or publish_ms > 500:
|
|
191
|
+
lock_held_ms = (
|
|
192
|
+
time.monotonic() - lock_wait_t0
|
|
193
|
+
) * 1000 - lock_wait_ms
|
|
194
|
+
self._log.warning(
|
|
195
|
+
"Tracker.update('%s', phase=%s): "
|
|
196
|
+
"lock_wait=%.0fms, publish=%.0fms, "
|
|
197
|
+
"lock_held=%.0fms",
|
|
198
|
+
filename,
|
|
199
|
+
phase,
|
|
200
|
+
lock_wait_ms,
|
|
201
|
+
publish_ms,
|
|
202
|
+
lock_held_ms,
|
|
203
|
+
)
|
|
204
|
+
elif lock_wait_ms > 100:
|
|
205
|
+
self._log.warning(
|
|
206
|
+
"Tracker.update('%s', phase=%s): lock_wait=%.0fms (no publish)",
|
|
207
|
+
filename,
|
|
208
|
+
phase,
|
|
209
|
+
lock_wait_ms,
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
async def tick_elapsed(self, filename: str, elapsed_seconds: float) -> None:
|
|
213
|
+
"""Publish an elapsed-time update without changing percent or retry state.
|
|
214
|
+
|
|
215
|
+
Used by the background ticker to show time-based progress while the
|
|
216
|
+
OpenAI API hasn't started returning bytes yet.
|
|
217
|
+
"""
|
|
218
|
+
lock_wait_t0 = time.monotonic()
|
|
219
|
+
async with self._lock:
|
|
220
|
+
lock_wait_ms = (time.monotonic() - lock_wait_t0) * 1000
|
|
221
|
+
state = self._states.get(filename)
|
|
222
|
+
if state is None or state.phase != "downloading":
|
|
223
|
+
return
|
|
224
|
+
state.elapsed_seconds = elapsed_seconds
|
|
225
|
+
now = time.monotonic()
|
|
226
|
+
if now - self._last_publish_time >= self._min_interval:
|
|
227
|
+
publish_t0 = time.monotonic()
|
|
228
|
+
await self._publish()
|
|
229
|
+
publish_ms = (time.monotonic() - publish_t0) * 1000
|
|
230
|
+
self._last_publish_time = now
|
|
231
|
+
if lock_wait_ms > 100 or publish_ms > 500:
|
|
232
|
+
lock_held_ms = (
|
|
233
|
+
time.monotonic() - lock_wait_t0
|
|
234
|
+
) * 1000 - lock_wait_ms
|
|
235
|
+
self._log.warning(
|
|
236
|
+
"Tracker.tick_elapsed('%s'): "
|
|
237
|
+
"lock_wait=%.0fms, publish=%.0fms, "
|
|
238
|
+
"lock_held=%.0fms",
|
|
239
|
+
filename,
|
|
240
|
+
lock_wait_ms,
|
|
241
|
+
publish_ms,
|
|
242
|
+
lock_held_ms,
|
|
243
|
+
)
|
|
244
|
+
elif lock_wait_ms > 100:
|
|
245
|
+
self._log.warning(
|
|
246
|
+
"Tracker.tick_elapsed('%s'): lock_wait=%.0fms (no publish)",
|
|
247
|
+
filename,
|
|
248
|
+
lock_wait_ms,
|
|
249
|
+
)
|
|
179
250
|
|
|
180
251
|
async def publish_initial(self) -> None:
|
|
181
252
|
"""Send the first progress update (marks all files as pending)."""
|
|
@@ -188,7 +259,15 @@ class _FileProgressTracker:
|
|
|
188
259
|
async def _publish(self) -> None:
|
|
189
260
|
text = self._build_progress_text()
|
|
190
261
|
try:
|
|
262
|
+
t0 = time.monotonic()
|
|
191
263
|
await self._chat_service.modify_assistant_message_async(content=text)
|
|
264
|
+
publish_ms = (time.monotonic() - t0) * 1000
|
|
265
|
+
if publish_ms > 500:
|
|
266
|
+
self._log.warning(
|
|
267
|
+
"modify_assistant_message_async took %.0fms "
|
|
268
|
+
"(SDK singleton / backend contention suspected)",
|
|
269
|
+
publish_ms,
|
|
270
|
+
)
|
|
192
271
|
except Exception:
|
|
193
272
|
self._log.debug("Failed to publish progress update", exc_info=True)
|
|
194
273
|
|
|
@@ -303,6 +382,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
303
382
|
|
|
304
383
|
@override
|
|
305
384
|
async def run(self, loop_response: ResponsesLanguageModelStreamResponse) -> None:
|
|
385
|
+
run_t0 = time.monotonic()
|
|
306
386
|
self._log.info("run() started — fetching and uploading code interpreter files")
|
|
307
387
|
|
|
308
388
|
container_files = loop_response.container_files
|
|
@@ -312,6 +392,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
312
392
|
[cf.filename for cf in container_files],
|
|
313
393
|
)
|
|
314
394
|
|
|
395
|
+
phase_t0 = time.monotonic()
|
|
315
396
|
try:
|
|
316
397
|
self._content_map: dict[str, str | None] = await self._load_previous_files() # type: ignore
|
|
317
398
|
if self._content_map:
|
|
@@ -326,6 +407,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
326
407
|
"proceeding without previous file context."
|
|
327
408
|
)
|
|
328
409
|
self._content_map = {}
|
|
410
|
+
load_ms = (time.monotonic() - phase_t0) * 1000
|
|
329
411
|
|
|
330
412
|
tracker: _FileProgressTracker | None = None
|
|
331
413
|
if container_files and self._chat_service is not None:
|
|
@@ -338,6 +420,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
338
420
|
)
|
|
339
421
|
await tracker.publish_initial()
|
|
340
422
|
|
|
423
|
+
phase_t0 = time.monotonic()
|
|
341
424
|
semaphore = asyncio.Semaphore(self._config.max_concurrent_file_downloads)
|
|
342
425
|
tasks = [
|
|
343
426
|
self._download_and_upload_container_files_to_knowledge_base(
|
|
@@ -346,6 +429,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
346
429
|
for citation in container_files
|
|
347
430
|
]
|
|
348
431
|
results = await asyncio.gather(*tasks)
|
|
432
|
+
download_upload_ms = (time.monotonic() - phase_t0) * 1000
|
|
349
433
|
|
|
350
434
|
for citation, result in zip(container_files, results):
|
|
351
435
|
self._content_map[citation.filename] = (
|
|
@@ -365,6 +449,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
365
449
|
failed,
|
|
366
450
|
)
|
|
367
451
|
|
|
452
|
+
phase_t0 = time.monotonic()
|
|
368
453
|
try:
|
|
369
454
|
await self._save_generated_files(
|
|
370
455
|
[
|
|
@@ -378,7 +463,9 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
378
463
|
"run() failed to save generated files to short-term memory; "
|
|
379
464
|
"file replacement will still proceed."
|
|
380
465
|
)
|
|
466
|
+
save_ms = (time.monotonic() - phase_t0) * 1000
|
|
381
467
|
|
|
468
|
+
phase_t0 = time.monotonic()
|
|
382
469
|
try:
|
|
383
470
|
if feature_flags.enable_code_execution_fence_un_17972.is_enabled(
|
|
384
471
|
self._company_id
|
|
@@ -399,18 +486,28 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
399
486
|
"file replacement will still proceed."
|
|
400
487
|
)
|
|
401
488
|
self._orphan_code_blocks = []
|
|
489
|
+
orphan_ms = (time.monotonic() - phase_t0) * 1000
|
|
402
490
|
|
|
491
|
+
total_ms = (time.monotonic() - run_t0) * 1000
|
|
403
492
|
self._log.info(
|
|
404
|
-
"run() finished — content_map has %d entries (%d
|
|
493
|
+
"run() finished — content_map has %d entries (%d ok, %d failed). "
|
|
494
|
+
"Timing: total=%.0fms, load_stm=%.0fms, download_upload=%.0fms, "
|
|
495
|
+
"save_stm=%.0fms, orphan=%.0fms",
|
|
405
496
|
len(self._content_map),
|
|
406
497
|
len(succeeded),
|
|
407
498
|
len(failed),
|
|
499
|
+
total_ms,
|
|
500
|
+
load_ms,
|
|
501
|
+
download_upload_ms,
|
|
502
|
+
save_ms,
|
|
503
|
+
orphan_ms,
|
|
408
504
|
)
|
|
409
505
|
|
|
410
506
|
@override
|
|
411
507
|
def apply_postprocessing_to_response(
|
|
412
508
|
self, loop_response: ResponsesLanguageModelStreamResponse
|
|
413
509
|
) -> bool:
|
|
510
|
+
apply_t0 = time.monotonic()
|
|
414
511
|
self._log.info(
|
|
415
512
|
"apply_postprocessing started — %d file(s) in content_map, fence_ff=%s",
|
|
416
513
|
len(self._content_map),
|
|
@@ -548,14 +645,16 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
548
645
|
"apply_postprocessing found and replaced dangling sandbox links"
|
|
549
646
|
)
|
|
550
647
|
|
|
648
|
+
apply_ms = (time.monotonic() - apply_t0) * 1000
|
|
551
649
|
self._log.info(
|
|
552
650
|
"apply_postprocessing finished — changed=%s, replaced=%d, missed=%d, "
|
|
553
|
-
"error=%d, dangling_cleaned=%s",
|
|
651
|
+
"error=%d, dangling_cleaned=%s (%.0fms)",
|
|
554
652
|
changed,
|
|
555
653
|
len(replaced_files),
|
|
556
654
|
len(missed_files),
|
|
557
655
|
len(error_files),
|
|
558
656
|
dangling_replaced,
|
|
657
|
+
apply_ms,
|
|
559
658
|
)
|
|
560
659
|
|
|
561
660
|
return changed
|
|
@@ -572,6 +671,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
572
671
|
tracker: _FileProgressTracker | None = None,
|
|
573
672
|
) -> _ContentInfo | None:
|
|
574
673
|
async with semaphore:
|
|
674
|
+
pipeline_t0 = time.monotonic()
|
|
575
675
|
self._log.info(
|
|
576
676
|
"Downloading container file '%s' (container=%s, file_id=%s)",
|
|
577
677
|
container_file.filename,
|
|
@@ -579,14 +679,17 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
579
679
|
container_file.file_id,
|
|
580
680
|
)
|
|
581
681
|
|
|
682
|
+
download_t0 = time.monotonic()
|
|
582
683
|
file_bytes = await self._download_file_bytes_with_progress(
|
|
583
684
|
container_file, tracker
|
|
584
685
|
)
|
|
686
|
+
download_ms = (time.monotonic() - download_t0) * 1000
|
|
585
687
|
|
|
586
688
|
self._log.info(
|
|
587
|
-
"Downloaded container file '%s' (%d bytes)",
|
|
689
|
+
"Downloaded container file '%s' (%d bytes, %.0fms)",
|
|
588
690
|
container_file.filename,
|
|
589
691
|
len(file_bytes),
|
|
692
|
+
download_ms,
|
|
590
693
|
)
|
|
591
694
|
|
|
592
695
|
if tracker:
|
|
@@ -596,12 +699,14 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
596
699
|
|
|
597
700
|
mime = guess_type(container_file.filename)[0] or "text/plain"
|
|
598
701
|
self._log.info(
|
|
599
|
-
"Uploading '%s' to knowledge base (mime=%s)",
|
|
702
|
+
"Uploading '%s' to knowledge base (mime=%s, %d bytes)",
|
|
600
703
|
container_file.filename,
|
|
601
704
|
mime,
|
|
705
|
+
len(file_bytes),
|
|
602
706
|
)
|
|
603
707
|
|
|
604
708
|
assert self._chat_service is not None # Checked in __init__
|
|
709
|
+
upload_t0 = time.monotonic()
|
|
605
710
|
content = await self._build_retry()(
|
|
606
711
|
self._chat_service.upload_to_chat_from_bytes_async,
|
|
607
712
|
content=file_bytes,
|
|
@@ -610,16 +715,29 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
610
715
|
skip_ingestion=True,
|
|
611
716
|
hide_in_chat=True,
|
|
612
717
|
)
|
|
718
|
+
upload_ms = (time.monotonic() - upload_t0) * 1000
|
|
719
|
+
if upload_ms > 2000:
|
|
720
|
+
self._log.warning(
|
|
721
|
+
"SDK upload for '%s' took %.0fms — "
|
|
722
|
+
"backend contention or slow blob storage suspected",
|
|
723
|
+
container_file.filename,
|
|
724
|
+
upload_ms,
|
|
725
|
+
)
|
|
613
726
|
|
|
614
727
|
if tracker:
|
|
615
728
|
await tracker.update(
|
|
616
729
|
container_file.filename, "done", force_publish=True
|
|
617
730
|
)
|
|
618
731
|
|
|
732
|
+
pipeline_ms = (time.monotonic() - pipeline_t0) * 1000
|
|
619
733
|
self._log.info(
|
|
620
|
-
"Uploaded '%s' — content_id=%s"
|
|
734
|
+
"Uploaded '%s' — content_id=%s. "
|
|
735
|
+
"Timing: download=%.0fms, upload=%.0fms, pipeline=%.0fms",
|
|
621
736
|
container_file.filename,
|
|
622
737
|
content.id,
|
|
738
|
+
download_ms,
|
|
739
|
+
upload_ms,
|
|
740
|
+
pipeline_ms,
|
|
623
741
|
)
|
|
624
742
|
return _ContentInfo(filename=container_file.filename, content_id=content.id)
|
|
625
743
|
|
|
@@ -633,49 +751,78 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
633
751
|
Uses ``with_streaming_response`` so we can read ``content-length``
|
|
634
752
|
and report download percentage. Falls back to elapsed-time display
|
|
635
753
|
when the header is absent.
|
|
754
|
+
|
|
755
|
+
A background ticker task publishes elapsed-time updates at regular
|
|
756
|
+
intervals even when the OpenAI API is slow to return the first byte.
|
|
636
757
|
"""
|
|
637
758
|
max_attempts = 1 + self._config.max_download_retries
|
|
638
759
|
download_start = time.monotonic()
|
|
639
760
|
last_exception: Exception | None = None
|
|
640
761
|
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
self.
|
|
647
|
-
|
|
762
|
+
ticker_task: asyncio.Task[None] | None = None
|
|
763
|
+
if tracker:
|
|
764
|
+
|
|
765
|
+
async def _ticker() -> None:
|
|
766
|
+
while True:
|
|
767
|
+
await asyncio.sleep(self._config.progress_update_interval)
|
|
768
|
+
elapsed = time.monotonic() - download_start
|
|
769
|
+
self._log.info(
|
|
770
|
+
"Still downloading '%s' (%.0fs elapsed)",
|
|
648
771
|
container_file.filename,
|
|
649
|
-
|
|
650
|
-
max_attempts,
|
|
651
|
-
delay,
|
|
772
|
+
elapsed,
|
|
652
773
|
)
|
|
653
|
-
|
|
654
|
-
|
|
774
|
+
await tracker.tick_elapsed(container_file.filename, elapsed)
|
|
775
|
+
|
|
776
|
+
ticker_task = asyncio.create_task(_ticker())
|
|
777
|
+
|
|
778
|
+
try:
|
|
779
|
+
for attempt_num in range(1, max_attempts + 1):
|
|
780
|
+
retry_num = attempt_num - 1
|
|
781
|
+
try:
|
|
782
|
+
if retry_num > 0:
|
|
783
|
+
delay = self._config.download_retry_base_delay * (
|
|
784
|
+
2 ** (retry_num - 1)
|
|
785
|
+
)
|
|
786
|
+
self._log.warning(
|
|
787
|
+
"Retrying download of '%s' (attempt %d/%d) after %.1fs",
|
|
655
788
|
container_file.filename,
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
max_retries=self._config.max_download_retries,
|
|
660
|
-
force_publish=True,
|
|
789
|
+
attempt_num,
|
|
790
|
+
max_attempts,
|
|
791
|
+
delay,
|
|
661
792
|
)
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
793
|
+
if tracker:
|
|
794
|
+
await tracker.update(
|
|
795
|
+
container_file.filename,
|
|
796
|
+
"downloading",
|
|
797
|
+
elapsed_seconds=time.monotonic() - download_start,
|
|
798
|
+
retry_attempt=retry_num,
|
|
799
|
+
max_retries=self._config.max_download_retries,
|
|
800
|
+
force_publish=True,
|
|
801
|
+
)
|
|
802
|
+
await asyncio.sleep(delay)
|
|
803
|
+
|
|
804
|
+
return await self._stream_download_bytes(
|
|
805
|
+
container_file, tracker, retry_num, download_start
|
|
806
|
+
)
|
|
807
|
+
except Exception as exc:
|
|
808
|
+
last_exception = exc
|
|
809
|
+
self._log.warning(
|
|
810
|
+
"Download attempt %d/%d failed for '%s': %s",
|
|
811
|
+
attempt_num,
|
|
812
|
+
max_attempts,
|
|
813
|
+
container_file.filename,
|
|
814
|
+
exc,
|
|
815
|
+
)
|
|
676
816
|
|
|
677
|
-
|
|
678
|
-
|
|
817
|
+
assert last_exception is not None
|
|
818
|
+
raise last_exception
|
|
819
|
+
finally:
|
|
820
|
+
if ticker_task is not None:
|
|
821
|
+
ticker_task.cancel()
|
|
822
|
+
try:
|
|
823
|
+
await ticker_task
|
|
824
|
+
except BaseException:
|
|
825
|
+
pass
|
|
679
826
|
|
|
680
827
|
async def _stream_download_bytes(
|
|
681
828
|
self,
|
|
@@ -684,25 +831,54 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
684
831
|
retry_attempt: int,
|
|
685
832
|
download_start: float,
|
|
686
833
|
) -> bytes:
|
|
687
|
-
"""Stream-download a single container file, reporting chunk-level progress.
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
834
|
+
"""Stream-download a single container file, reporting chunk-level progress.
|
|
835
|
+
|
|
836
|
+
SDK-level retries are disabled (``max_retries=0``) so that only our
|
|
837
|
+
manual retry loop retries, with full visibility in logs and progress
|
|
838
|
+
tracker. A shorter read timeout avoids waiting 10 minutes on a
|
|
839
|
+
stalled connection.
|
|
840
|
+
"""
|
|
841
|
+
t0 = time.monotonic()
|
|
842
|
+
async with self._client.with_options(
|
|
843
|
+
max_retries=0,
|
|
844
|
+
timeout=httpx.Timeout(5.0, read=self._config.download_read_timeout),
|
|
845
|
+
).containers.files.content.with_streaming_response.retrieve(
|
|
846
|
+
file_id=container_file.file_id,
|
|
847
|
+
container_id=container_file.container_id,
|
|
848
|
+
) as response:
|
|
849
|
+
first_byte_ms = (time.monotonic() - t0) * 1000
|
|
850
|
+
self._log.info(
|
|
851
|
+
"Stream opened for '%s' — first-byte latency=%.0fms, "
|
|
852
|
+
"content-length=%s, status=%s",
|
|
853
|
+
container_file.filename,
|
|
854
|
+
first_byte_ms,
|
|
855
|
+
response.headers.get("content-length", "unknown"),
|
|
856
|
+
response.status_code,
|
|
857
|
+
)
|
|
694
858
|
content_length = response.headers.get("content-length")
|
|
695
859
|
total = int(content_length) if content_length else None
|
|
696
860
|
chunks: list[bytes] = []
|
|
697
861
|
downloaded = 0
|
|
862
|
+
last_chunk_time = time.monotonic()
|
|
698
863
|
async for chunk in response.iter_bytes(
|
|
699
864
|
chunk_size=self._config.download_chunk_size
|
|
700
865
|
):
|
|
866
|
+
now = time.monotonic()
|
|
867
|
+
chunk_gap_ms = (now - last_chunk_time) * 1000
|
|
868
|
+
if chunk_gap_ms > 500:
|
|
869
|
+
self._log.warning(
|
|
870
|
+
"Download chunk gap for '%s': %.0fms "
|
|
871
|
+
"(downloaded=%d bytes so far)",
|
|
872
|
+
container_file.filename,
|
|
873
|
+
chunk_gap_ms,
|
|
874
|
+
downloaded,
|
|
875
|
+
)
|
|
701
876
|
chunks.append(chunk)
|
|
702
877
|
downloaded += len(chunk)
|
|
703
878
|
if tracker:
|
|
704
879
|
pct = (downloaded * 100 // total) if total else None
|
|
705
880
|
elapsed = time.monotonic() - download_start
|
|
881
|
+
update_t0 = time.monotonic()
|
|
706
882
|
await tracker.update(
|
|
707
883
|
container_file.filename,
|
|
708
884
|
"downloading",
|
|
@@ -711,6 +887,22 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
711
887
|
retry_attempt=retry_attempt,
|
|
712
888
|
max_retries=self._config.max_download_retries,
|
|
713
889
|
)
|
|
890
|
+
update_ms = (time.monotonic() - update_t0) * 1000
|
|
891
|
+
if update_ms > 200:
|
|
892
|
+
self._log.warning(
|
|
893
|
+
"tracker.update() blocked download stream for '%s' "
|
|
894
|
+
"for %.0fms (lock contention or slow modify_message)",
|
|
895
|
+
container_file.filename,
|
|
896
|
+
update_ms,
|
|
897
|
+
)
|
|
898
|
+
last_chunk_time = time.monotonic()
|
|
899
|
+
transfer_ms = (time.monotonic() - t0) * 1000 - first_byte_ms
|
|
900
|
+
self._log.info(
|
|
901
|
+
"Stream complete for '%s' — transfer=%.0fms, total=%d bytes",
|
|
902
|
+
container_file.filename,
|
|
903
|
+
transfer_ms,
|
|
904
|
+
downloaded,
|
|
905
|
+
)
|
|
714
906
|
return b"".join(chunks)
|
|
715
907
|
|
|
716
908
|
async def _load_previous_files(self) -> dict[str, str]:
|
|
@@ -720,16 +912,22 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
720
912
|
self._log.info(
|
|
721
913
|
"Loading previously generated code interpreter files from short term memory"
|
|
722
914
|
)
|
|
915
|
+
t0 = time.monotonic()
|
|
723
916
|
memory = await self._short_term_memory_manager.load_async()
|
|
917
|
+
elapsed_ms = (time.monotonic() - t0) * 1000
|
|
724
918
|
|
|
725
919
|
if memory is None:
|
|
726
920
|
self._log.info(
|
|
727
|
-
"No previously generated code interpreter files found
|
|
921
|
+
"No previously generated code interpreter files found "
|
|
922
|
+
"in short term memory (%.0fms)",
|
|
923
|
+
elapsed_ms,
|
|
728
924
|
)
|
|
729
925
|
return {}
|
|
730
926
|
|
|
731
927
|
self._log.info(
|
|
732
|
-
"Found %s previously generated code interpreter files
|
|
928
|
+
"Found %s previously generated code interpreter files (%.0fms)",
|
|
929
|
+
len(memory.root),
|
|
930
|
+
elapsed_ms,
|
|
733
931
|
)
|
|
734
932
|
|
|
735
933
|
return {content.filename: content.content_id for content in memory.root}
|
|
@@ -738,9 +936,15 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
738
936
|
if self._short_term_memory_manager is None or len(content_infos) == 0:
|
|
739
937
|
return
|
|
740
938
|
|
|
939
|
+
t0 = time.monotonic()
|
|
741
940
|
await self._short_term_memory_manager.save_async(
|
|
742
941
|
_DisplayedFilesShortTermMemorySchema(root=content_infos)
|
|
743
942
|
)
|
|
943
|
+
self._log.info(
|
|
944
|
+
"Saved %d generated file(s) to short term memory (%.0fms)",
|
|
945
|
+
len(content_infos),
|
|
946
|
+
(time.monotonic() - t0) * 1000,
|
|
947
|
+
)
|
|
744
948
|
|
|
745
949
|
async def _upload_orphan_code_as_txt(
|
|
746
950
|
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.13}/unique_toolkit/_common/config_checker/README.md
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/config_checker/__init__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/config_checker/__main__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/config_checker/cli.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/config_checker/differ.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/config_checker/exporter.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/config_checker/models.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/config_checker/registry.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/config_checker/validator.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/default_language_model.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/docx_generator/__init__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/docx_generator/config.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/docx_generator/schemas.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/docx_generator/service.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/endpoint_builder.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.11 → unique_toolkit-1.68.13}/unique_toolkit/_common/endpoint_requestor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|