unique_toolkit 1.53.0__tar.gz → 1.53.2__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.53.0 → unique_toolkit-1.53.2}/PKG-INFO +1 -1
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/pyproject.toml +1 -1
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/pydantic/rjsf_tags.py +5 -2
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/hallucination/utils.py +4 -2
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/feature_flags/feature_flags.py +5 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +7 -5
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +17 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +211 -3
- unique_toolkit-1.53.2/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +22 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/language_model/schemas.py +8 -1
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/README.md +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/services/chat_service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/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.53.
|
|
3
|
+
Version: 1.53.2
|
|
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>
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/pydantic/rjsf_tags.py
RENAMED
|
@@ -13,6 +13,7 @@ Key components:
|
|
|
13
13
|
|
|
14
14
|
from __future__ import annotations
|
|
15
15
|
|
|
16
|
+
import types
|
|
16
17
|
from collections.abc import Callable
|
|
17
18
|
from enum import StrEnum
|
|
18
19
|
from typing import Annotated, Any, Union, get_args, get_origin
|
|
@@ -20,6 +21,8 @@ from typing import Annotated, Any, Union, get_args, get_origin
|
|
|
20
21
|
from pydantic import BaseModel
|
|
21
22
|
from typing_extensions import get_type_hints
|
|
22
23
|
|
|
24
|
+
_UNION_ORIGINS = {Union, types.UnionType}
|
|
25
|
+
|
|
23
26
|
|
|
24
27
|
class CustomWidgetName(StrEnum):
|
|
25
28
|
"""Mirrors TypeScript CustomWidgetName. Keep in sync when extending."""
|
|
@@ -774,7 +777,7 @@ def _unwrap_optional(ann: Any) -> Any:
|
|
|
774
777
|
The unwrapped type if it was Optional/Union with None, otherwise
|
|
775
778
|
the original type unchanged
|
|
776
779
|
"""
|
|
777
|
-
if get_origin(ann)
|
|
780
|
+
if get_origin(ann) in _UNION_ORIGINS:
|
|
778
781
|
args = [a for a in get_args(ann) if a not in _NONE_TYPES]
|
|
779
782
|
if len(args) == 1:
|
|
780
783
|
return args[0]
|
|
@@ -921,7 +924,7 @@ def ui_schema_for_model(
|
|
|
921
924
|
node["additionalProperties"] = val_node
|
|
922
925
|
|
|
923
926
|
# Union -> anyOf branches
|
|
924
|
-
elif origin
|
|
927
|
+
elif origin in _UNION_ORIGINS:
|
|
925
928
|
branches = []
|
|
926
929
|
for alt in get_args(base):
|
|
927
930
|
if alt in _NONE_TYPES:
|
|
@@ -203,8 +203,10 @@ def context_text_from_stream_response(
|
|
|
203
203
|
SourceSelectionMode.FROM_ORDER: lambda: _from_order_source_selection_mode(
|
|
204
204
|
response_references, selected_chunks
|
|
205
205
|
),
|
|
206
|
-
SourceSelectionMode.FROM_ORIGINAL_RESPONSE: lambda:
|
|
207
|
-
|
|
206
|
+
SourceSelectionMode.FROM_ORIGINAL_RESPONSE: lambda: (
|
|
207
|
+
_from_original_response_source_selection_mode(
|
|
208
|
+
response.message.original_text, selected_chunks, reference_pattern
|
|
209
|
+
)
|
|
208
210
|
),
|
|
209
211
|
}
|
|
210
212
|
|
|
@@ -77,6 +77,11 @@ class FeatureFlags(BaseSettings):
|
|
|
77
77
|
description="Enable HTML rendering for code interpreter files (UN-15131). Can be 'true' or comma-separated company IDs.",
|
|
78
78
|
)
|
|
79
79
|
|
|
80
|
+
enable_code_execution_fence_un_17972: FeatureFlag = Field(
|
|
81
|
+
default=FeatureFlag(False),
|
|
82
|
+
description="Emit codeExecution fences in message.text for code interpreter outputs (UN-17972). When disabled, inline file refs are kept as-is. Can be 'true' or comma-separated company IDs.",
|
|
83
|
+
)
|
|
84
|
+
|
|
80
85
|
model_config = SettingsConfigDict(
|
|
81
86
|
extra="ignore",
|
|
82
87
|
env_prefix="FEATURE_FLAG_",
|
|
@@ -88,11 +88,13 @@ def _add_sub_agent_references_in_place(
|
|
|
88
88
|
message_text=text,
|
|
89
89
|
message_refs=refs,
|
|
90
90
|
new_refs=sub_agent_refs,
|
|
91
|
-
ref_pattern_f=lambda x:
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
91
|
+
ref_pattern_f=lambda x: (
|
|
92
|
+
r"\s*" # Normalize spaces
|
|
93
|
+
+ SubAgentTool.get_sub_agent_reference_re(
|
|
94
|
+
name=response.name,
|
|
95
|
+
sequence_number=response.sequence_number,
|
|
96
|
+
reference_number=x,
|
|
97
|
+
)
|
|
96
98
|
),
|
|
97
99
|
ref_replacement_f=lambda x: " " + get_reference_pattern(x),
|
|
98
100
|
)
|
|
@@ -24,6 +24,23 @@ _TEMPLATE = """
|
|
|
24
24
|
|
|
25
25
|
""".lstrip()
|
|
26
26
|
|
|
27
|
+
# Pattern matching the block emitted by _TEMPLATE (including trailing </br>).
|
|
28
|
+
# Used when another postprocessor supersedes this content (e.g. fence injection).
|
|
29
|
+
_EXECUTED_CODE_BLOCK_RE = re.compile(
|
|
30
|
+
r"\n*<details><summary>Code Interpreter Call</summary>.*?</details>[ \t]*\n*(?:[ \t]*</br>[ \t]*\n*)?",
|
|
31
|
+
re.DOTALL,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def strip_executed_code_blocks(text: str) -> str:
|
|
36
|
+
"""Remove all executed-code <details> blocks emitted by this postprocessor.
|
|
37
|
+
|
|
38
|
+
Call this when the same content is represented elsewhere (e.g. imgWithSource
|
|
39
|
+
/ fileWithSource fences) so the message does not contain duplicate code blocks.
|
|
40
|
+
"""
|
|
41
|
+
return _EXECUTED_CODE_BLOCK_RE.sub("", text)
|
|
42
|
+
|
|
43
|
+
|
|
27
44
|
logger = logging.getLogger(__name__)
|
|
28
45
|
|
|
29
46
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import asyncio
|
|
2
|
+
import json
|
|
2
3
|
import logging
|
|
3
4
|
import re
|
|
4
5
|
from mimetypes import guess_type
|
|
@@ -19,6 +20,14 @@ from unique_toolkit.agentic.short_term_memory_manager.persistent_short_term_memo
|
|
|
19
20
|
PersistentShortMemoryManager,
|
|
20
21
|
)
|
|
21
22
|
from unique_toolkit.agentic.tools.config import get_configuration_dict
|
|
23
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors.code_display import (
|
|
24
|
+
strip_executed_code_blocks,
|
|
25
|
+
)
|
|
26
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.schemas import (
|
|
27
|
+
CodeInterpreterBlock,
|
|
28
|
+
CodeInterpreterFile,
|
|
29
|
+
CodeInterpreterFileType,
|
|
30
|
+
)
|
|
22
31
|
from unique_toolkit.content.schemas import ContentReference
|
|
23
32
|
from unique_toolkit.content.service import ContentService
|
|
24
33
|
from unique_toolkit.language_model.schemas import ResponsesLanguageModelStreamResponse
|
|
@@ -188,7 +197,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
188
197
|
loop_response.message.text, replaced = _replace_container_file_citation(
|
|
189
198
|
text=loop_response.message.text,
|
|
190
199
|
filename=filename,
|
|
191
|
-
|
|
200
|
+
content_id=content_id,
|
|
192
201
|
)
|
|
193
202
|
changed |= replaced
|
|
194
203
|
|
|
@@ -209,6 +218,18 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
209
218
|
)
|
|
210
219
|
)
|
|
211
220
|
ref_number += 1
|
|
221
|
+
|
|
222
|
+
if feature_flags.enable_code_execution_fence_un_17972.is_enabled(
|
|
223
|
+
self._company_id
|
|
224
|
+
):
|
|
225
|
+
code_blocks = _build_code_blocks(loop_response, self._content_map)
|
|
226
|
+
text_before = loop_response.message.text
|
|
227
|
+
loop_response.message.text = _inject_code_execution_fences(
|
|
228
|
+
loop_response.message.text,
|
|
229
|
+
code_blocks,
|
|
230
|
+
)
|
|
231
|
+
changed |= loop_response.message.text != text_before
|
|
232
|
+
|
|
212
233
|
return changed
|
|
213
234
|
|
|
214
235
|
@override
|
|
@@ -273,6 +294,193 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
273
294
|
)
|
|
274
295
|
|
|
275
296
|
|
|
297
|
+
def _get_file_type(filename: str) -> CodeInterpreterFileType:
|
|
298
|
+
mime = guess_type(filename)[0] or ""
|
|
299
|
+
if mime.startswith("image/"):
|
|
300
|
+
return "image"
|
|
301
|
+
if mime == "text/html":
|
|
302
|
+
return "html"
|
|
303
|
+
return "document"
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
def _file_title(filename: str) -> str:
|
|
307
|
+
"""Derive a human-readable title from a filename.
|
|
308
|
+
|
|
309
|
+
Strips the extension, replaces underscores and hyphens with spaces, and
|
|
310
|
+
applies title case. e.g. monthly_revenue_chart.png -> Monthly Revenue Chart.
|
|
311
|
+
"""
|
|
312
|
+
stem = filename.rsplit(".", 1)[0] if "." in filename else filename
|
|
313
|
+
return stem.replace("_", " ").replace("-", " ").title()
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
def _file_frontend_type(filename: str) -> str:
|
|
317
|
+
"""Map filename to the type token the frontend expects in fileWithSource.
|
|
318
|
+
|
|
319
|
+
Assumed enum (to be confirmed with frontend):
|
|
320
|
+
excel → .xlsx / .xls
|
|
321
|
+
csv → .csv
|
|
322
|
+
word → .docx / .doc
|
|
323
|
+
pdf → .pdf
|
|
324
|
+
html → .html / .htm
|
|
325
|
+
image → image/* MIME
|
|
326
|
+
document → fallback
|
|
327
|
+
"""
|
|
328
|
+
ext = filename.rsplit(".", 1)[-1].lower() if "." in filename else ""
|
|
329
|
+
mime = guess_type(filename)[0] or ""
|
|
330
|
+
if mime.startswith("image/"):
|
|
331
|
+
return "image"
|
|
332
|
+
mapping = {
|
|
333
|
+
"xlsx": "excel",
|
|
334
|
+
"xls": "excel",
|
|
335
|
+
"csv": "csv",
|
|
336
|
+
"docx": "word",
|
|
337
|
+
"doc": "word",
|
|
338
|
+
"pdf": "pdf",
|
|
339
|
+
"html": "html",
|
|
340
|
+
"htm": "html",
|
|
341
|
+
}
|
|
342
|
+
return mapping.get(ext, "document")
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
def _escape_code_attr(code: str) -> str:
|
|
346
|
+
"""Escape the code string for embedding as a double-quoted attribute value.
|
|
347
|
+
|
|
348
|
+
Uses JSON encoding so all special characters (quotes, backslashes, newlines,
|
|
349
|
+
control chars) are handled consistently and safely.
|
|
350
|
+
"""
|
|
351
|
+
return json.dumps(code.rstrip())[1:-1]
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
def _build_file_fence(file: CodeInterpreterFile, code: str, fence_id: int) -> str:
|
|
355
|
+
"""Build a per-file fence marker.
|
|
356
|
+
|
|
357
|
+
Images produce an imgWithSource fence; all other types produce a
|
|
358
|
+
fileWithSource fence. Each fence is self-contained: it carries the
|
|
359
|
+
content_id, a title derived from the filename, the type, and the
|
|
360
|
+
escaped source code.
|
|
361
|
+
|
|
362
|
+
Format (4 backticks so inner code backticks never close the fence):
|
|
363
|
+
````imgWithSource(id='{n}', contentId='{id}', title="{title}", code="{escaped_code}")````
|
|
364
|
+
````fileWithSource(id='{n}', contentId='{id}', title="{title}", type="{type}", code="{escaped_code}")````
|
|
365
|
+
"""
|
|
366
|
+
title = _file_title(file.filename)
|
|
367
|
+
escaped = _escape_code_attr(code)
|
|
368
|
+
outer = "````"
|
|
369
|
+
if file.type == "image":
|
|
370
|
+
tag = f"imgWithSource(id='{fence_id}', contentId='{file.content_id}', title=\"{title}\", code=\"{escaped}\")"
|
|
371
|
+
else:
|
|
372
|
+
ftype = _file_frontend_type(file.filename)
|
|
373
|
+
tag = f'fileWithSource(id=\'{fence_id}\', contentId=\'{file.content_id}\', title="{title}", type="{ftype}", code="{escaped}")'
|
|
374
|
+
return f"{outer}{tag}{outer}"
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
def _inline_ref_pattern(file: CodeInterpreterFile) -> re.Pattern[str]:
|
|
378
|
+
"""Return a compiled pattern matching the inline ref for a file in message text.
|
|
379
|
+
|
|
380
|
+
After apply_postprocessing_to_response replaces sandbox paths, each file type
|
|
381
|
+
has a distinct inline form in the text:
|
|
382
|
+
image → 
|
|
383
|
+
document → [{filename}](unique://content/{content_id})
|
|
384
|
+
html → ```HtmlRendering\\n100%\\n500px\\n\\nunique://content/{content_id}\\n\\n```
|
|
385
|
+
"""
|
|
386
|
+
cid = re.escape(file.content_id)
|
|
387
|
+
fname = re.escape(file.filename)
|
|
388
|
+
if file.type == "image":
|
|
389
|
+
return re.compile(rf"!\[image\]\(unique://content/{cid}\)")
|
|
390
|
+
if file.type == "html":
|
|
391
|
+
return re.compile(
|
|
392
|
+
rf"```HtmlRendering\n100%\n500px\n\nunique://content/{cid}\n\n```",
|
|
393
|
+
re.DOTALL,
|
|
394
|
+
)
|
|
395
|
+
return re.compile(rf"\[{fname}\]\(unique://content/{cid}\)")
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
def _inject_code_execution_fences(
|
|
399
|
+
text: str, code_blocks: list[CodeInterpreterBlock]
|
|
400
|
+
) -> str:
|
|
401
|
+
"""Replace inline file refs with imgWithSource / fileWithSource fences.
|
|
402
|
+
|
|
403
|
+
Images get an imgWithSource fence; all other files (PDF, Excel, Word, CSV, etc.)
|
|
404
|
+
get a fileWithSource fence. Both carry contentId, title, type (fileWithSource only),
|
|
405
|
+
and the generating code so the frontend can render or offer a download with full
|
|
406
|
+
context.
|
|
407
|
+
|
|
408
|
+
Each file gets its own fence placed at the position of its inline ref. Duplicate
|
|
409
|
+
refs for the same file (overwrite case) are removed after the first is replaced.
|
|
410
|
+
When at least one fence was injected, executed-code <details> blocks are
|
|
411
|
+
stripped via strip_executed_code_blocks() from the code_display postprocessor.
|
|
412
|
+
|
|
413
|
+
fence_id is a message-level counter so each fence has a unique id.
|
|
414
|
+
"""
|
|
415
|
+
fence_id = 1
|
|
416
|
+
any_fence_injected = False
|
|
417
|
+
for block in code_blocks:
|
|
418
|
+
for file in block.files:
|
|
419
|
+
fence = _build_file_fence(file, block.code, fence_id)
|
|
420
|
+
pattern = _inline_ref_pattern(file)
|
|
421
|
+
new_text, n = re.subn(pattern, lambda m, _f=fence: _f, text, count=1)
|
|
422
|
+
if n:
|
|
423
|
+
text = new_text
|
|
424
|
+
fence_id += 1
|
|
425
|
+
any_fence_injected = True
|
|
426
|
+
# Remove duplicate refs (overwrite case)
|
|
427
|
+
text = re.sub(pattern, "", text)
|
|
428
|
+
if any_fence_injected:
|
|
429
|
+
text = strip_executed_code_blocks(text)
|
|
430
|
+
return text
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
def _build_code_blocks(
|
|
434
|
+
loop_response: ResponsesLanguageModelStreamResponse,
|
|
435
|
+
content_map: dict[str, str | None],
|
|
436
|
+
) -> list[CodeInterpreterBlock]:
|
|
437
|
+
"""Map each code interpreter call to the files it produced via /mnt/data/ path matching.
|
|
438
|
+
|
|
439
|
+
For each file, the LAST code block that references its path is treated as the
|
|
440
|
+
producer — this handles the case where a file is overwritten across blocks, where
|
|
441
|
+
the final content belongs to the last writer.
|
|
442
|
+
"""
|
|
443
|
+
calls = loop_response.code_interpreter_calls
|
|
444
|
+
|
|
445
|
+
# Step 1: for each file, find the index of the last block that references it.
|
|
446
|
+
file_to_block_idx: dict[str, int] = {}
|
|
447
|
+
for idx, call in enumerate(calls):
|
|
448
|
+
if not call.code:
|
|
449
|
+
continue
|
|
450
|
+
for annotation in loop_response.container_files:
|
|
451
|
+
if (
|
|
452
|
+
content_map.get(annotation.filename) is not None
|
|
453
|
+
and f"/mnt/data/{annotation.filename}" in call.code
|
|
454
|
+
):
|
|
455
|
+
file_to_block_idx[annotation.filename] = idx
|
|
456
|
+
|
|
457
|
+
# Step 2: group files by their owning block index, deduplicating by filename.
|
|
458
|
+
# OpenAI may emit multiple annotations for the same filename when a file is
|
|
459
|
+
# overwritten across executions. Using a dict keyed by filename ensures each
|
|
460
|
+
# file appears exactly once per block (last annotation wins, consistent with
|
|
461
|
+
# the last-writer-wins rule applied in step 1).
|
|
462
|
+
block_file_map: dict[int, dict[str, CodeInterpreterFile]] = {}
|
|
463
|
+
for annotation in loop_response.container_files:
|
|
464
|
+
content_id = content_map.get(annotation.filename)
|
|
465
|
+
if content_id is None:
|
|
466
|
+
continue
|
|
467
|
+
idx = file_to_block_idx.get(annotation.filename)
|
|
468
|
+
if idx is None:
|
|
469
|
+
continue
|
|
470
|
+
block_file_map.setdefault(idx, {})[annotation.filename] = CodeInterpreterFile(
|
|
471
|
+
filename=annotation.filename,
|
|
472
|
+
content_id=content_id,
|
|
473
|
+
type=_get_file_type(annotation.filename),
|
|
474
|
+
)
|
|
475
|
+
|
|
476
|
+
# Step 3: build result preserving block execution order.
|
|
477
|
+
return [
|
|
478
|
+
CodeInterpreterBlock(code=calls[idx].code, files=list(files.values()))
|
|
479
|
+
for idx, files in sorted(block_file_map.items())
|
|
480
|
+
if calls[idx].code
|
|
481
|
+
]
|
|
482
|
+
|
|
483
|
+
|
|
276
484
|
def _get_next_ref_number(references: list[ContentReference]) -> int:
|
|
277
485
|
max_ref_number = 0
|
|
278
486
|
for ref in references:
|
|
@@ -339,7 +547,7 @@ unique://content/{content_id}
|
|
|
339
547
|
|
|
340
548
|
|
|
341
549
|
def _replace_container_file_citation(
|
|
342
|
-
text: str, filename: str,
|
|
550
|
+
text: str, filename: str, content_id: str
|
|
343
551
|
) -> tuple[str, bool]:
|
|
344
552
|
file_markdown = rf"\[.*?\]\(sandbox:/mnt/data/{re.escape(filename)}\)"
|
|
345
553
|
|
|
@@ -350,6 +558,6 @@ def _replace_container_file_citation(
|
|
|
350
558
|
logger.info("Displaying file %s", filename)
|
|
351
559
|
return re.sub(
|
|
352
560
|
file_markdown,
|
|
353
|
-
f"
|
|
561
|
+
f"[{filename}](unique://content/{content_id})",
|
|
354
562
|
text,
|
|
355
563
|
), True
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""Code interpreter types used by the generated-files postprocessor."""
|
|
2
|
+
|
|
3
|
+
from typing import Literal
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
CodeInterpreterFileType = Literal["image", "document", "html"]
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class CodeInterpreterFile(BaseModel):
|
|
11
|
+
"""A single file produced by a code interpreter execution."""
|
|
12
|
+
|
|
13
|
+
filename: str
|
|
14
|
+
content_id: str
|
|
15
|
+
type: CodeInterpreterFileType
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class CodeInterpreterBlock(BaseModel):
|
|
19
|
+
"""A code interpreter execution paired with the files it produced."""
|
|
20
|
+
|
|
21
|
+
code: str
|
|
22
|
+
files: list[CodeInterpreterFile]
|
|
@@ -210,7 +210,14 @@ class ResponsesLanguageModelStreamResponse(LanguageModelStreamResponse):
|
|
|
210
210
|
if content.type == "output_text":
|
|
211
211
|
for annotation in content.annotations:
|
|
212
212
|
if annotation.type == "container_file_citation":
|
|
213
|
-
|
|
213
|
+
# Filter out ghost annotations produced as a side-effect of
|
|
214
|
+
# OutputImage being present. These entries have
|
|
215
|
+
# start_index == end_index (zero-width, no text span) and
|
|
216
|
+
# filename == file_id. The index check alone is sufficient
|
|
217
|
+
# because all legitimate citations reference an actual span
|
|
218
|
+
# of text (start_index < end_index).
|
|
219
|
+
if annotation.start_index != annotation.end_index:
|
|
220
|
+
container_files.append(annotation)
|
|
214
221
|
return container_files
|
|
215
222
|
|
|
216
223
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/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.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/README.md
RENAMED
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/__init__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/__main__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/cli.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/differ.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/exporter.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/models.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/registry.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/config_checker/validator.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/default_language_model.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/docx_generator/__init__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/docx_generator/config.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/docx_generator/schemas.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/docx_generator/service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/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.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/feature_flags/schema.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/tests/test_referencing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/token/image_token_counting.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/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.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/utils/image/encode.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/utils/jinja/helpers.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/utils/jinja/render.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/utils/jinja/schema.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.53.0 → unique_toolkit-1.53.2}/unique_toolkit/_common/utils/write_configuration.py
RENAMED
|
File without changes
|