unique_toolkit 1.68.8__tar.gz → 1.68.10__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.8 → unique_toolkit-1.68.10}/PKG-INFO +1 -1
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/pyproject.toml +1 -1
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +187 -40
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/README.md +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/services/chat_service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/services/factory.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/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.10
|
|
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>
|
|
@@ -41,6 +41,14 @@ from unique_toolkit.short_term_memory.service import ShortTermMemoryService
|
|
|
41
41
|
logger = logging.getLogger(__name__)
|
|
42
42
|
|
|
43
43
|
|
|
44
|
+
class _ChatLoggerAdapter(logging.LoggerAdapter[logging.Logger]):
|
|
45
|
+
"""LoggerAdapter that prefixes every message with ``[chat_id=…]``."""
|
|
46
|
+
|
|
47
|
+
def process(self, msg: str, kwargs): # type: ignore[override]
|
|
48
|
+
extra = dict(self.extra) if self.extra else {} # type: ignore[arg-type]
|
|
49
|
+
return f"[chat_id={extra.get('chat_id', 'n/a')}] {msg}", kwargs
|
|
50
|
+
|
|
51
|
+
|
|
44
52
|
class DisplayCodeInterpreterFilesPostProcessorConfig(BaseModel):
|
|
45
53
|
model_config = get_configuration_dict()
|
|
46
54
|
upload_to_chat: SkipJsonSchema[bool] = Field(
|
|
@@ -53,8 +61,8 @@ class DisplayCodeInterpreterFilesPostProcessorConfig(BaseModel):
|
|
|
53
61
|
)
|
|
54
62
|
|
|
55
63
|
file_download_failed_message: str = Field(
|
|
56
|
-
default="⚠️ File
|
|
57
|
-
description="The message to display when a file download fails.",
|
|
64
|
+
default="⚠️ File could not be generated. Please try again.",
|
|
65
|
+
description="The message to display when a file download fails after all retry attempts.",
|
|
58
66
|
)
|
|
59
67
|
max_concurrent_file_downloads: int = Field(
|
|
60
68
|
default=10,
|
|
@@ -122,6 +130,10 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
122
130
|
if self._chat_service is None:
|
|
123
131
|
raise ValueError("ChatService is required if uploadToChat is True")
|
|
124
132
|
|
|
133
|
+
self._log: logging.LoggerAdapter[logging.Logger] = _ChatLoggerAdapter(
|
|
134
|
+
logger, {"chat_id": chat_id or "n/a"}
|
|
135
|
+
)
|
|
136
|
+
|
|
125
137
|
self._orphan_code_blocks: list[CodeInterpreterBlock] = []
|
|
126
138
|
self._short_term_memory_manager = None
|
|
127
139
|
if chat_id is not None and user_id is not None and company_id is not None:
|
|
@@ -131,14 +143,44 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
131
143
|
chat_id=chat_id,
|
|
132
144
|
)
|
|
133
145
|
|
|
146
|
+
def _build_retry(self) -> AsyncRetrying:
|
|
147
|
+
"""Build a tenacity retry policy from the current config.
|
|
148
|
+
|
|
149
|
+
Reused for both container-file downloads and knowledge-base uploads so
|
|
150
|
+
that every I/O call gets the same exponential-backoff behaviour.
|
|
151
|
+
"""
|
|
152
|
+
return AsyncRetrying(
|
|
153
|
+
stop=stop_after_attempt(1 + self._config.max_download_retries),
|
|
154
|
+
wait=wait_exponential(multiplier=self._config.download_retry_base_delay),
|
|
155
|
+
before_sleep=before_sleep_log(self._log, logging.WARNING), # type: ignore[arg-type]
|
|
156
|
+
reraise=True,
|
|
157
|
+
)
|
|
158
|
+
|
|
134
159
|
@override
|
|
135
160
|
async def run(self, loop_response: ResponsesLanguageModelStreamResponse) -> None:
|
|
136
|
-
|
|
161
|
+
self._log.info("run() started — fetching and uploading code interpreter files")
|
|
137
162
|
|
|
138
163
|
container_files = loop_response.container_files
|
|
139
|
-
|
|
164
|
+
self._log.info(
|
|
165
|
+
"run() found %d container file annotation(s): %s",
|
|
166
|
+
len(container_files),
|
|
167
|
+
[cf.filename for cf in container_files],
|
|
168
|
+
)
|
|
140
169
|
|
|
141
|
-
|
|
170
|
+
try:
|
|
171
|
+
self._content_map: dict[str, str | None] = await self._load_previous_files() # type: ignore
|
|
172
|
+
if self._content_map:
|
|
173
|
+
self._log.info(
|
|
174
|
+
"run() loaded %d previous file(s) from short-term memory: %s",
|
|
175
|
+
len(self._content_map),
|
|
176
|
+
list(self._content_map.keys()),
|
|
177
|
+
)
|
|
178
|
+
except Exception:
|
|
179
|
+
self._log.exception(
|
|
180
|
+
"run() failed to load previous files from short-term memory; "
|
|
181
|
+
"proceeding without previous file context."
|
|
182
|
+
)
|
|
183
|
+
self._content_map = {}
|
|
142
184
|
|
|
143
185
|
semaphore = asyncio.Semaphore(self._config.max_concurrent_file_downloads)
|
|
144
186
|
tasks = [
|
|
@@ -150,32 +192,75 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
150
192
|
results = await asyncio.gather(*tasks)
|
|
151
193
|
|
|
152
194
|
for citation, result in zip(container_files, results):
|
|
153
|
-
# Overwrite if file has been re-generated
|
|
154
195
|
self._content_map[citation.filename] = (
|
|
155
196
|
result.content_id if result is not None else None
|
|
156
197
|
)
|
|
157
198
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
199
|
+
succeeded = {f: cid for f, cid in self._content_map.items() if cid is not None}
|
|
200
|
+
failed = [f for f, cid in self._content_map.items() if cid is None]
|
|
201
|
+
self._log.info(
|
|
202
|
+
"run() download/upload complete — %d succeeded, %d failed. "
|
|
203
|
+
"succeeded=%s, failed=%s",
|
|
204
|
+
len(succeeded),
|
|
205
|
+
len(failed),
|
|
206
|
+
list(succeeded.keys()),
|
|
207
|
+
failed,
|
|
164
208
|
)
|
|
165
209
|
|
|
166
|
-
|
|
167
|
-
self.
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
210
|
+
try:
|
|
211
|
+
await self._save_generated_files(
|
|
212
|
+
[
|
|
213
|
+
_ContentInfo(filename=filename, content_id=content_id)
|
|
214
|
+
for filename, content_id in self._content_map.items()
|
|
215
|
+
if content_id is not None
|
|
216
|
+
]
|
|
217
|
+
)
|
|
218
|
+
except Exception:
|
|
219
|
+
self._log.exception(
|
|
220
|
+
"run() failed to save generated files to short-term memory; "
|
|
221
|
+
"file replacement will still proceed."
|
|
222
|
+
)
|
|
223
|
+
|
|
224
|
+
try:
|
|
225
|
+
if feature_flags.enable_code_execution_fence_un_17972.is_enabled(
|
|
226
|
+
self._company_id
|
|
227
|
+
):
|
|
228
|
+
self._orphan_code_blocks = await self._upload_orphan_code_as_txt(
|
|
229
|
+
loop_response
|
|
230
|
+
)
|
|
231
|
+
if self._orphan_code_blocks:
|
|
232
|
+
self._log.info(
|
|
233
|
+
"run() produced %d orphan code block(s)",
|
|
234
|
+
len(self._orphan_code_blocks),
|
|
235
|
+
)
|
|
236
|
+
else:
|
|
237
|
+
self._orphan_code_blocks = []
|
|
238
|
+
except Exception:
|
|
239
|
+
self._log.exception(
|
|
240
|
+
"run() failed to process orphan code blocks; "
|
|
241
|
+
"file replacement will still proceed."
|
|
171
242
|
)
|
|
172
|
-
else:
|
|
173
243
|
self._orphan_code_blocks = []
|
|
174
244
|
|
|
245
|
+
self._log.info(
|
|
246
|
+
"run() finished — content_map has %d entries (%d with content_id, %d failed)",
|
|
247
|
+
len(self._content_map),
|
|
248
|
+
len(succeeded),
|
|
249
|
+
len(failed),
|
|
250
|
+
)
|
|
251
|
+
|
|
175
252
|
@override
|
|
176
253
|
def apply_postprocessing_to_response(
|
|
177
254
|
self, loop_response: ResponsesLanguageModelStreamResponse
|
|
178
255
|
) -> bool:
|
|
256
|
+
self._log.info(
|
|
257
|
+
"apply_postprocessing started — %d file(s) in content_map, fence_ff=%s",
|
|
258
|
+
len(self._content_map),
|
|
259
|
+
feature_flags.enable_code_execution_fence_un_17972.is_enabled(
|
|
260
|
+
self._company_id
|
|
261
|
+
),
|
|
262
|
+
)
|
|
263
|
+
|
|
179
264
|
if loop_response.message.references is None:
|
|
180
265
|
loop_response.message.references = []
|
|
181
266
|
if loop_response.message.text is None:
|
|
@@ -187,6 +272,10 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
187
272
|
self._company_id
|
|
188
273
|
)
|
|
189
274
|
|
|
275
|
+
replaced_files: list[str] = []
|
|
276
|
+
missed_files: list[str] = []
|
|
277
|
+
error_files: list[str] = []
|
|
278
|
+
|
|
190
279
|
for filename, content_id in self._content_map.items():
|
|
191
280
|
if content_id is None:
|
|
192
281
|
loop_response.message.text, replaced = _replace_container_file_error(
|
|
@@ -195,12 +284,14 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
195
284
|
error_message=self._config.file_download_failed_message,
|
|
196
285
|
)
|
|
197
286
|
changed |= replaced
|
|
287
|
+
error_files.append(filename)
|
|
198
288
|
continue
|
|
199
289
|
|
|
200
|
-
|
|
201
|
-
|
|
290
|
+
mime = guess_type(filename)[0] or ""
|
|
291
|
+
is_image = mime.startswith("image/")
|
|
292
|
+
is_html = mime == "text/html"
|
|
293
|
+
file_type = "image" if is_image else ("html" if is_html else "document")
|
|
202
294
|
|
|
203
|
-
# Images
|
|
204
295
|
if is_image:
|
|
205
296
|
loop_response.message.text, replaced = (
|
|
206
297
|
_replace_container_image_citation(
|
|
@@ -229,6 +320,17 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
229
320
|
)
|
|
230
321
|
changed |= replaced
|
|
231
322
|
|
|
323
|
+
if replaced:
|
|
324
|
+
replaced_files.append(filename)
|
|
325
|
+
self._log.info(
|
|
326
|
+
"Replaced sandbox link for '%s' (type=%s, content_id=%s)",
|
|
327
|
+
filename,
|
|
328
|
+
file_type,
|
|
329
|
+
content_id,
|
|
330
|
+
)
|
|
331
|
+
else:
|
|
332
|
+
missed_files.append(filename)
|
|
333
|
+
|
|
232
334
|
is_html_rendered = is_html
|
|
233
335
|
if replaced and not (is_image or is_html_rendered or fence_ff_on):
|
|
234
336
|
loop_response.message.references.append(
|
|
@@ -242,15 +344,30 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
242
344
|
)
|
|
243
345
|
ref_number += 1
|
|
244
346
|
|
|
347
|
+
self._log.info(
|
|
348
|
+
"Stage-1 replacement summary — replaced=%s, missed=%s, error=%s",
|
|
349
|
+
replaced_files,
|
|
350
|
+
missed_files,
|
|
351
|
+
error_files,
|
|
352
|
+
)
|
|
353
|
+
|
|
245
354
|
if fence_ff_on:
|
|
246
355
|
code_blocks = _build_code_blocks(loop_response, self._content_map)
|
|
356
|
+
self._log.info(
|
|
357
|
+
"Fence injection — %d code block(s), files: %s",
|
|
358
|
+
len(code_blocks),
|
|
359
|
+
[f.filename for b in code_blocks for f in b.files],
|
|
360
|
+
)
|
|
247
361
|
_warn_unmatched_code_blocks(self._content_map, code_blocks)
|
|
248
362
|
text_before = loop_response.message.text
|
|
249
363
|
loop_response.message.text = _inject_code_execution_fences(
|
|
250
364
|
loop_response.message.text,
|
|
251
365
|
code_blocks,
|
|
252
366
|
)
|
|
253
|
-
|
|
367
|
+
fences_changed = loop_response.message.text != text_before
|
|
368
|
+
changed |= fences_changed
|
|
369
|
+
if fences_changed:
|
|
370
|
+
self._log.info("Fence injection modified the message text")
|
|
254
371
|
|
|
255
372
|
if self._orphan_code_blocks:
|
|
256
373
|
fence_id = _get_next_fence_id(loop_response.message.text)
|
|
@@ -259,12 +376,29 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
259
376
|
loop_response.message.text.rstrip() + "\n\n" + orphan_fences
|
|
260
377
|
)
|
|
261
378
|
changed = True
|
|
379
|
+
self._log.info(
|
|
380
|
+
"Appended %d orphan fence(s)", len(self._orphan_code_blocks)
|
|
381
|
+
)
|
|
262
382
|
|
|
263
383
|
_warn_missing_content_ids(loop_response.message.text, self._content_map)
|
|
264
384
|
loop_response.message.text, dangling_replaced = _replace_dangling_sandbox_links(
|
|
265
385
|
loop_response.message.text, self._config.file_download_failed_message
|
|
266
386
|
)
|
|
267
387
|
changed |= dangling_replaced
|
|
388
|
+
if dangling_replaced:
|
|
389
|
+
self._log.warning(
|
|
390
|
+
"apply_postprocessing found and replaced dangling sandbox links"
|
|
391
|
+
)
|
|
392
|
+
|
|
393
|
+
self._log.info(
|
|
394
|
+
"apply_postprocessing finished — changed=%s, replaced=%d, missed=%d, "
|
|
395
|
+
"error=%d, dangling_cleaned=%s",
|
|
396
|
+
changed,
|
|
397
|
+
len(replaced_files),
|
|
398
|
+
len(missed_files),
|
|
399
|
+
len(error_files),
|
|
400
|
+
dangling_replaced,
|
|
401
|
+
)
|
|
268
402
|
|
|
269
403
|
return changed
|
|
270
404
|
|
|
@@ -279,52 +413,64 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
279
413
|
semaphore: asyncio.Semaphore,
|
|
280
414
|
) -> _ContentInfo | None:
|
|
281
415
|
async with semaphore:
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
before_sleep=before_sleep_log(logger, logging.WARNING),
|
|
288
|
-
reraise=True,
|
|
416
|
+
self._log.info(
|
|
417
|
+
"Downloading container file '%s' (container=%s, file_id=%s)",
|
|
418
|
+
container_file.filename,
|
|
419
|
+
container_file.container_id,
|
|
420
|
+
container_file.file_id,
|
|
289
421
|
)
|
|
422
|
+
retry = self._build_retry()
|
|
290
423
|
file_content = await retry(
|
|
291
424
|
self._client.containers.files.content.retrieve,
|
|
292
425
|
container_id=container_file.container_id,
|
|
293
426
|
file_id=container_file.file_id,
|
|
294
427
|
)
|
|
428
|
+
self._log.info(
|
|
429
|
+
"Downloaded container file '%s' (%d bytes)",
|
|
430
|
+
container_file.filename,
|
|
431
|
+
len(file_content.content),
|
|
432
|
+
)
|
|
295
433
|
|
|
296
|
-
|
|
297
|
-
|
|
434
|
+
mime = guess_type(container_file.filename)[0] or "text/plain"
|
|
435
|
+
self._log.info(
|
|
436
|
+
"Uploading '%s' to knowledge base (mime=%s)",
|
|
298
437
|
container_file.filename,
|
|
438
|
+
mime,
|
|
299
439
|
)
|
|
300
440
|
|
|
301
441
|
assert self._chat_service is not None # Checked in __init__
|
|
302
|
-
content = await self.
|
|
442
|
+
content = await self._build_retry()(
|
|
443
|
+
self._chat_service.upload_to_chat_from_bytes_async,
|
|
303
444
|
content=file_content.content,
|
|
304
445
|
content_name=container_file.filename,
|
|
305
|
-
mime_type=
|
|
446
|
+
mime_type=mime,
|
|
306
447
|
skip_ingestion=True,
|
|
307
448
|
hide_in_chat=True,
|
|
308
449
|
)
|
|
309
450
|
|
|
451
|
+
self._log.info(
|
|
452
|
+
"Uploaded '%s' — content_id=%s",
|
|
453
|
+
container_file.filename,
|
|
454
|
+
content.id,
|
|
455
|
+
)
|
|
310
456
|
return _ContentInfo(filename=container_file.filename, content_id=content.id)
|
|
311
457
|
|
|
312
458
|
async def _load_previous_files(self) -> dict[str, str]:
|
|
313
459
|
if self._short_term_memory_manager is None:
|
|
314
460
|
return {}
|
|
315
461
|
|
|
316
|
-
|
|
462
|
+
self._log.info(
|
|
317
463
|
"Loading previously generated code interpreter files from short term memory"
|
|
318
464
|
)
|
|
319
465
|
memory = await self._short_term_memory_manager.load_async()
|
|
320
466
|
|
|
321
467
|
if memory is None:
|
|
322
|
-
|
|
468
|
+
self._log.info(
|
|
323
469
|
"No previously generated code interpreter files found in short term memory"
|
|
324
470
|
)
|
|
325
471
|
return {}
|
|
326
472
|
|
|
327
|
-
|
|
473
|
+
self._log.info(
|
|
328
474
|
"Found %s previously generated code interpreter files", len(memory.root)
|
|
329
475
|
)
|
|
330
476
|
|
|
@@ -378,7 +524,8 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
378
524
|
filename = f"code_{i + 1}.txt" if use_numeric_suffix else "code.txt"
|
|
379
525
|
|
|
380
526
|
try:
|
|
381
|
-
content = await self.
|
|
527
|
+
content = await self._build_retry()(
|
|
528
|
+
self._chat_service.upload_to_chat_from_bytes_async,
|
|
382
529
|
content=txt_content.encode("utf-8"),
|
|
383
530
|
content_name=filename,
|
|
384
531
|
mime_type="text/plain",
|
|
@@ -386,7 +533,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
386
533
|
hide_in_chat=True,
|
|
387
534
|
)
|
|
388
535
|
except Exception:
|
|
389
|
-
|
|
536
|
+
self._log.exception(
|
|
390
537
|
"Failed to upload orphan code block as txt for call %d ('%s'); "
|
|
391
538
|
"falling back to legacy code block display.",
|
|
392
539
|
i,
|
|
@@ -402,7 +549,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
402
549
|
orphan_blocks.append(
|
|
403
550
|
CodeInterpreterBlock(code=call.code, files=[orphan_file])
|
|
404
551
|
)
|
|
405
|
-
|
|
552
|
+
self._log.info(
|
|
406
553
|
"Uploaded orphan code block as '%s' (content_id=%s)",
|
|
407
554
|
filename,
|
|
408
555
|
content.id,
|
|
@@ -938,7 +1085,7 @@ def _replace_container_file_citation(
|
|
|
938
1085
|
original pre-fence behaviour is restored: the link is replaced with <sup>N</sup>
|
|
939
1086
|
and the file remains accessible via the references panel.
|
|
940
1087
|
"""
|
|
941
|
-
file_markdown = rf"
|
|
1088
|
+
file_markdown = rf"!?\[.*?\]\(sandbox:/mnt/data/{re.escape(filename)}\)"
|
|
942
1089
|
|
|
943
1090
|
if not re.search(file_markdown, text):
|
|
944
1091
|
logger.warning(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/base_model_type_attribute.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/README.md
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/__init__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/__main__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/cli.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/differ.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/exporter.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/models.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/registry.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/config_checker/validator.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/default_language_model.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/docx_generator/__init__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/docx_generator/config.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/docx_generator/schemas.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/docx_generator/service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/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.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/feature_flags/schema.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/pydantic/rjsf_tags.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/tests/test_referencing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/token/token_counting.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/utils/image/encode.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/utils/jinja/helpers.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/utils/jinja/render.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/utils/jinja/schema.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/utils/jinja/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/utils/write_configuration.py
RENAMED
|
File without changes
|
{unique_toolkit-1.68.8 → unique_toolkit-1.68.10}/unique_toolkit/_common/validate_required_values.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|