unique_toolkit 1.53.1__tar.gz → 1.53.3__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.1 → unique_toolkit-1.53.3}/PKG-INFO +1 -1
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/pyproject.toml +1 -1
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/hallucination/utils.py +4 -2
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/feature_flags/feature_flags.py +5 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +7 -5
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/tool/config.py +2 -2
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +17 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +211 -3
- unique_toolkit-1.53.3/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +22 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/language_model/schemas.py +8 -1
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/README.md +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/services/chat_service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/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.3
|
|
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>
|
|
@@ -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
|
)
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/agentic/tools/a2a/tool/config.py
RENAMED
|
@@ -98,11 +98,11 @@ This is the message that will be sent to the sub-agent.
|
|
|
98
98
|
class SubAgentToolConfig(BaseToolConfig):
|
|
99
99
|
model_config = get_configuration_dict()
|
|
100
100
|
|
|
101
|
-
assistant_id: str = Field(
|
|
101
|
+
assistant_id: Annotated[str, RJSFMetaTag.SpecialWidget.hidden()] = Field(
|
|
102
102
|
default="",
|
|
103
103
|
description="The unique identifier of the assistant to use for the sub-agent.",
|
|
104
104
|
)
|
|
105
|
-
chat_id: str | None = Field(
|
|
105
|
+
chat_id: Annotated[str | None, RJSFMetaTag.SpecialWidget.hidden()] = Field(
|
|
106
106
|
default=None,
|
|
107
107
|
description="The chat ID to use for the sub-agent conversation. If None, a new chat will be created.",
|
|
108
108
|
)
|
|
@@ -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.1 → unique_toolkit-1.53.3}/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.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/README.md
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/__init__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/__main__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/cli.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/differ.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/exporter.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/models.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/registry.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/config_checker/validator.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/default_language_model.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/docx_generator/__init__.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/docx_generator/config.py
RENAMED
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/docx_generator/schemas.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/docx_generator/service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/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.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/feature_flags/schema.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/pydantic/rjsf_tags.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/tests/test_referencing.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/token/image_token_counting.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/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.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/utils/image/encode.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/utils/jinja/helpers.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/utils/jinja/render.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/utils/jinja/schema.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/utils/write_configuration.py
RENAMED
|
File without changes
|
{unique_toolkit-1.53.1 → unique_toolkit-1.53.3}/unique_toolkit/_common/validate_required_values.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|