unique-toolkit 2026.22.0.dev0__tar.gz → 2026.22.0.dev2__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-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/PKG-INFO +2 -2
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/pyproject.toml +2 -2
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +42 -5
- unique_toolkit-2026.22.0.dev2/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +103 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +7 -55
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +70 -40
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/services/chat_service.py +37 -9
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/README.md +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/metadata_filter_scope.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/message_log_order.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/names.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/feature_flags.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/find_env_file.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/README.md +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/_internal/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/_base.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/content_tree/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/base/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/identity/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/group/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/group/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/user/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/resources/user/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/experimental/testing/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/monitoring/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/monitoring/middleware.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/monitoring/registry.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/services/factory.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/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: 2026.22.0.
|
|
3
|
+
Version: 2026.22.0.dev2
|
|
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>
|
|
@@ -16,7 +16,7 @@ Requires-Dist: sseclient>=0.0.27,<0.0.28
|
|
|
16
16
|
Requires-Dist: openai>=1.105.0,<3
|
|
17
17
|
Requires-Dist: platformdirs>=4.0.0,<5
|
|
18
18
|
Requires-Dist: pillow>=12.1.1
|
|
19
|
-
Requires-Dist: unique-sdk>=2026.22.0.
|
|
19
|
+
Requires-Dist: unique-sdk>=2026.22.0.dev2,<2026.22.0rc0
|
|
20
20
|
Requires-Dist: jambo>=0.1.2,<0.2
|
|
21
21
|
Requires-Dist: jinja2>=3.1.6,<4
|
|
22
22
|
Requires-Dist: docxtpl>=0.20.1,<0.21
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "unique_toolkit"
|
|
3
|
-
version = "2026.22.0.
|
|
3
|
+
version = "2026.22.0.dev2"
|
|
4
4
|
description = ""
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -28,7 +28,7 @@ dependencies = [
|
|
|
28
28
|
"openai>=1.105.0,<3",
|
|
29
29
|
"platformdirs>=4.0.0,<5",
|
|
30
30
|
"pillow>=12.1.1",
|
|
31
|
-
"unique-sdk>=2026.22.0.
|
|
31
|
+
"unique-sdk>=2026.22.0.dev2,<2026.22.0rc0",
|
|
32
32
|
"jambo>=0.1.2,<0.2",
|
|
33
33
|
"jinja2>=3.1.6,<4",
|
|
34
34
|
"docxtpl>=0.20.1,<0.21",
|
|
@@ -17,7 +17,36 @@ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors
|
|
|
17
17
|
)
|
|
18
18
|
from unique_toolkit.agentic.tools.schemas import BaseToolConfig
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
_TOOL_DESCRIPTION_FILES_SUFFIX = """
|
|
21
|
+
{%- if user_uploaded_files and user_uploaded_files | length > 0 %}
|
|
22
|
+
|
|
23
|
+
## User Uploaded Files
|
|
24
|
+
The following files have been uploaded by the user and are available in the environment:
|
|
25
|
+
{% for file in user_uploaded_files %}
|
|
26
|
+
- {{ file }}
|
|
27
|
+
{% endfor %}
|
|
28
|
+
{% endif %}
|
|
29
|
+
|
|
30
|
+
{%- if kb_uploaded_files and kb_uploaded_files | length > 0 %}
|
|
31
|
+
|
|
32
|
+
## Knowledge Base Files
|
|
33
|
+
These files are made available by the system but were NOT uploaded by the user:
|
|
34
|
+
{% for file in kb_uploaded_files %}
|
|
35
|
+
- {{ file }}
|
|
36
|
+
{% endfor %}
|
|
37
|
+
{% endif %}
|
|
38
|
+
|
|
39
|
+
{%- if code_interpreter_artifacts and code_interpreter_artifacts | length > 0 %}
|
|
40
|
+
|
|
41
|
+
## Code Interpreter Artifacts
|
|
42
|
+
The following files have been generated by you using the python tool in previous turns:
|
|
43
|
+
{% for file in code_interpreter_artifacts %}
|
|
44
|
+
- {{ file }}
|
|
45
|
+
{% endfor %}
|
|
46
|
+
{% endif %}
|
|
47
|
+
""".strip()
|
|
48
|
+
|
|
49
|
+
_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT_BASE = """
|
|
21
50
|
Use this tool to run python code, e.g to generate plots, process excel files, perform calculations, etc.
|
|
22
51
|
|
|
23
52
|
Instructions:
|
|
@@ -37,7 +66,7 @@ WHENEVER you reference a generated file, you MUST use the following format:
|
|
|
37
66
|
IMPORTANT: Do NOT append a leading `!` even when displaying an image.
|
|
38
67
|
Always use a line break between the title and the markdown!
|
|
39
68
|
- Files with image file extensions are displayed directly in the chat, while other file extensions are shown as download links.
|
|
40
|
-
- Not using syntax above will FAIL to show images to the user.
|
|
69
|
+
- Not using syntax above will FAIL to show images to the user.
|
|
41
70
|
- YOU MUST use the syntax above to display images, otherwise the image will not be displayed in the chat.
|
|
42
71
|
- Only the following file types are allowed to be uploaded to the platform, anything else will FAIL: PDF, DOCX, XLSX, PPTX, CSV, HTML, MD, TXT, PNG, JPG, JPEG.
|
|
43
72
|
- You MUST always use this syntax, otherwise the files will not be displayed in the chat.
|
|
@@ -58,7 +87,11 @@ Handling User Queries:
|
|
|
58
87
|
- REMEMBER that you can always read the content of text, csv files if needed. In this case, you MUST always limit the amount of data displayed.
|
|
59
88
|
- If a tool step fails, you must recover as much as possible.
|
|
60
89
|
- After exhausting all possible solutions without success, inform the user of what was tried and request clarification/help.
|
|
61
|
-
"""
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
DEFAULT_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT = (
|
|
93
|
+
_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT_BASE + _TOOL_DESCRIPTION_FILES_SUFFIX
|
|
94
|
+
).strip()
|
|
62
95
|
|
|
63
96
|
# Used when the code-execution fence feature flag (UN-17972) is enabled.
|
|
64
97
|
# The frontend derives the artifact title from the filename itself, so the
|
|
@@ -71,7 +104,7 @@ Handling User Queries:
|
|
|
71
104
|
# UN-19880: kaleido is not installed in the Azure OpenAI code interpreter environment,
|
|
72
105
|
# so plotly's fig.write_image() always fails. The "Visualization library choice" section
|
|
73
106
|
# steers the model to use matplotlib for PNG outputs and plotly only for HTML artifacts.
|
|
74
|
-
|
|
107
|
+
_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT_FENCE_BASE = """
|
|
75
108
|
Use this tool to run python code, e.g to generate plots, process excel files, perform calculations, etc.
|
|
76
109
|
|
|
77
110
|
Instructions:
|
|
@@ -137,7 +170,11 @@ Handling User Queries:
|
|
|
137
170
|
- REMEMBER that you can always read the content of text, csv files if needed. In this case, you MUST always limit the amount of data displayed.
|
|
138
171
|
- If a tool step fails, you must recover as much as possible.
|
|
139
172
|
- After exhausting all possible solutions without success, inform the user of what was tried and request clarification/help.
|
|
140
|
-
"""
|
|
173
|
+
"""
|
|
174
|
+
|
|
175
|
+
DEFAULT_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT_FENCE = (
|
|
176
|
+
_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT_FENCE_BASE + _TOOL_DESCRIPTION_FILES_SUFFIX
|
|
177
|
+
).strip()
|
|
141
178
|
|
|
142
179
|
|
|
143
180
|
DEFAULT_TOOL_DESCRIPTION_FOR_USER_PROMPT = ""
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from mimetypes import guess_type
|
|
3
|
+
|
|
4
|
+
from openai.types.responses.response_output_text import AnnotationContainerFileCitation
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
from unique_toolkit import ChatService
|
|
8
|
+
from unique_toolkit._common.utils.files import FileMimeType, ImageMimeType
|
|
9
|
+
from unique_toolkit.content.schemas import Content
|
|
10
|
+
|
|
11
|
+
_CODE_EXECUTION_ARTIFACT_METADATA_KEY: str = "codeExecutionArtifactMetadata"
|
|
12
|
+
|
|
13
|
+
_LOGGER = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class CodeExecutionArtifactMetadata(BaseModel):
|
|
17
|
+
container_id: str
|
|
18
|
+
file_id: str
|
|
19
|
+
filepath: str
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _kb_safe_mime(mime: str) -> str:
|
|
23
|
+
"""Return a MIME type the Unique KB will accept.
|
|
24
|
+
|
|
25
|
+
Membership is defined by ``FileMimeType`` and ``ImageMimeType`` in
|
|
26
|
+
``unique_toolkit._common.utils.files`` (same catalog as path-based helpers
|
|
27
|
+
like ``FileMimeType.is_valid_mime``, but here we already have a resolved
|
|
28
|
+
MIME string from ``mimetypes.guess_type``, so we use StrEnum value lookup
|
|
29
|
+
instead of re-parsing a path).
|
|
30
|
+
|
|
31
|
+
The KB GraphQL API rejects many code-file MIME types (e.g. ``text/x-python``
|
|
32
|
+
for ``.py`` files). Anything not in those enums is coerced to
|
|
33
|
+
``text/plain`` so the file can be stored and downloaded without changing
|
|
34
|
+
its bytes.
|
|
35
|
+
|
|
36
|
+
Other ``image/*`` subtypes (e.g. ``image/jpg``) still pass through unchanged.
|
|
37
|
+
"""
|
|
38
|
+
try:
|
|
39
|
+
FileMimeType(mime)
|
|
40
|
+
return mime
|
|
41
|
+
except ValueError:
|
|
42
|
+
pass
|
|
43
|
+
try:
|
|
44
|
+
ImageMimeType(mime)
|
|
45
|
+
return mime
|
|
46
|
+
except ValueError:
|
|
47
|
+
pass
|
|
48
|
+
if mime.startswith("image/"):
|
|
49
|
+
return mime
|
|
50
|
+
return "text/plain"
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
async def save_code_execution_artifact(
|
|
54
|
+
chat_service: ChatService,
|
|
55
|
+
file: AnnotationContainerFileCitation,
|
|
56
|
+
file_bytes: bytes,
|
|
57
|
+
) -> Content:
|
|
58
|
+
raw_mime = guess_type(file.filename)[0] or "text/plain"
|
|
59
|
+
mime = _kb_safe_mime(raw_mime)
|
|
60
|
+
|
|
61
|
+
if mime != raw_mime:
|
|
62
|
+
_LOGGER.info(
|
|
63
|
+
"MIME type '%s' is not supported by the Unique KB; "
|
|
64
|
+
"uploading '%s' as 'text/plain' so the file can be stored and downloaded.",
|
|
65
|
+
raw_mime,
|
|
66
|
+
file.filename,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
_LOGGER.info(
|
|
70
|
+
"Uploading '%s' to knowledge base (%d bytes, mime type %s)",
|
|
71
|
+
file.filename,
|
|
72
|
+
len(file_bytes),
|
|
73
|
+
mime,
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
return await chat_service.upload_to_chat_from_bytes_async(
|
|
77
|
+
content=file_bytes,
|
|
78
|
+
content_name=file.filename,
|
|
79
|
+
mime_type=mime,
|
|
80
|
+
skip_ingestion=True,
|
|
81
|
+
hide_in_chat=True,
|
|
82
|
+
metadata={
|
|
83
|
+
_CODE_EXECUTION_ARTIFACT_METADATA_KEY: CodeExecutionArtifactMetadata(
|
|
84
|
+
container_id=file.container_id,
|
|
85
|
+
file_id=file.file_id,
|
|
86
|
+
filepath=f"/mnt/data/{file.filename}",
|
|
87
|
+
).model_dump()
|
|
88
|
+
},
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def load_code_execution_metadata(
|
|
93
|
+
content: Content,
|
|
94
|
+
) -> CodeExecutionArtifactMetadata | None:
|
|
95
|
+
if (
|
|
96
|
+
content.metadata is None
|
|
97
|
+
or _CODE_EXECUTION_ARTIFACT_METADATA_KEY not in content.metadata
|
|
98
|
+
):
|
|
99
|
+
return None
|
|
100
|
+
|
|
101
|
+
return CodeExecutionArtifactMetadata.model_validate(
|
|
102
|
+
content.metadata[_CODE_EXECUTION_ARTIFACT_METADATA_KEY]
|
|
103
|
+
)
|
|
@@ -21,7 +21,6 @@ from tenacity import (
|
|
|
21
21
|
|
|
22
22
|
from unique_toolkit import ChatService
|
|
23
23
|
from unique_toolkit._common.execution import failsafe_async
|
|
24
|
-
from unique_toolkit._common.utils.files import FileMimeType, ImageMimeType
|
|
25
24
|
from unique_toolkit.agentic.feature_flags.feature_flags import feature_flags
|
|
26
25
|
from unique_toolkit.agentic.postprocessor.postprocessor_manager import (
|
|
27
26
|
ResponsesApiPostprocessor,
|
|
@@ -30,6 +29,9 @@ from unique_toolkit.agentic.short_term_memory_manager.persistent_short_term_memo
|
|
|
30
29
|
PersistentShortMemoryManager,
|
|
31
30
|
)
|
|
32
31
|
from unique_toolkit.agentic.tools.config import get_configuration_dict
|
|
32
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors.artifacts import (
|
|
33
|
+
save_code_execution_artifact,
|
|
34
|
+
)
|
|
33
35
|
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.schemas import (
|
|
34
36
|
CodeInterpreterBlock,
|
|
35
37
|
CodeInterpreterFile,
|
|
@@ -661,32 +663,13 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
661
663
|
container_file.filename, "uploading", force_publish=True
|
|
662
664
|
)
|
|
663
665
|
|
|
664
|
-
raw_mime = guess_type(container_file.filename)[0] or "text/plain"
|
|
665
|
-
mime = _kb_safe_mime(raw_mime)
|
|
666
|
-
if mime != raw_mime:
|
|
667
|
-
self._log.info(
|
|
668
|
-
"MIME type '%s' is not supported by the Unique KB; "
|
|
669
|
-
"uploading '%s' as '%s' so the file can be stored and downloaded.",
|
|
670
|
-
raw_mime,
|
|
671
|
-
container_file.filename,
|
|
672
|
-
mime,
|
|
673
|
-
)
|
|
674
|
-
self._log.info(
|
|
675
|
-
"Uploading '%s' to knowledge base (mime=%s, %d bytes)",
|
|
676
|
-
container_file.filename,
|
|
677
|
-
mime,
|
|
678
|
-
len(file_bytes),
|
|
679
|
-
)
|
|
680
|
-
|
|
681
666
|
assert self._chat_service is not None # Checked in __init__
|
|
682
667
|
upload_t0 = time.monotonic()
|
|
683
668
|
content = await self._build_retry()(
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
skip_ingestion=True,
|
|
689
|
-
hide_in_chat=True,
|
|
669
|
+
save_code_execution_artifact,
|
|
670
|
+
chat_service=self._chat_service,
|
|
671
|
+
file=container_file,
|
|
672
|
+
file_bytes=file_bytes,
|
|
690
673
|
)
|
|
691
674
|
upload_ms = (time.monotonic() - upload_t0) * 1000
|
|
692
675
|
if upload_ms > 2000:
|
|
@@ -929,37 +912,6 @@ def _get_file_type(filename: str) -> CodeInterpreterFileType:
|
|
|
929
912
|
return "document"
|
|
930
913
|
|
|
931
914
|
|
|
932
|
-
def _kb_safe_mime(mime: str) -> str:
|
|
933
|
-
"""Return a MIME type the Unique KB will accept.
|
|
934
|
-
|
|
935
|
-
Membership is defined by ``FileMimeType`` and ``ImageMimeType`` in
|
|
936
|
-
``unique_toolkit._common.utils.files`` (same catalog as path-based helpers
|
|
937
|
-
like ``FileMimeType.is_valid_mime``, but here we already have a resolved
|
|
938
|
-
MIME string from ``mimetypes.guess_type``, so we use StrEnum value lookup
|
|
939
|
-
instead of re-parsing a path).
|
|
940
|
-
|
|
941
|
-
The KB GraphQL API rejects many code-file MIME types (e.g. ``text/x-python``
|
|
942
|
-
for ``.py`` files). Anything not in those enums is coerced to
|
|
943
|
-
``text/plain`` so the file can be stored and downloaded without changing
|
|
944
|
-
its bytes.
|
|
945
|
-
|
|
946
|
-
Other ``image/*`` subtypes (e.g. ``image/jpg``) still pass through unchanged.
|
|
947
|
-
"""
|
|
948
|
-
try:
|
|
949
|
-
FileMimeType(mime)
|
|
950
|
-
return mime
|
|
951
|
-
except ValueError:
|
|
952
|
-
pass
|
|
953
|
-
try:
|
|
954
|
-
ImageMimeType(mime)
|
|
955
|
-
return mime
|
|
956
|
-
except ValueError:
|
|
957
|
-
pass
|
|
958
|
-
if mime.startswith("image/"):
|
|
959
|
-
return mime
|
|
960
|
-
return "text/plain"
|
|
961
|
-
|
|
962
|
-
|
|
963
915
|
def _file_title(filename: str) -> str:
|
|
964
916
|
"""Derive a human-readable title from a filename.
|
|
965
917
|
|
|
@@ -8,10 +8,10 @@ from openai import (
|
|
|
8
8
|
AsyncOpenAI,
|
|
9
9
|
BaseModel,
|
|
10
10
|
NotFoundError,
|
|
11
|
-
OpenAIError,
|
|
12
11
|
)
|
|
13
12
|
from openai.types.responses import ResponseCodeInterpreterToolCall, ResponseIncludable
|
|
14
13
|
from openai.types.responses.tool_param import CodeInterpreter
|
|
14
|
+
from pydantic import ValidationError
|
|
15
15
|
from tenacity import (
|
|
16
16
|
AsyncRetrying,
|
|
17
17
|
before_sleep_log,
|
|
@@ -20,7 +20,11 @@ from tenacity import (
|
|
|
20
20
|
)
|
|
21
21
|
|
|
22
22
|
from unique_toolkit import ContentService, ShortTermMemoryService
|
|
23
|
-
from unique_toolkit._common.execution import
|
|
23
|
+
from unique_toolkit._common.execution import (
|
|
24
|
+
SafeTaskExecutor,
|
|
25
|
+
failsafe_async,
|
|
26
|
+
)
|
|
27
|
+
from unique_toolkit._common.utils.jinja.render import render_template
|
|
24
28
|
from unique_toolkit.agentic.feature_flags.feature_flags import feature_flags
|
|
25
29
|
from unique_toolkit.agentic.short_term_memory_manager.persistent_short_term_memory_manager import (
|
|
26
30
|
PersistentShortMemoryManager,
|
|
@@ -32,6 +36,9 @@ from unique_toolkit.agentic.tools.openai_builtin.base import (
|
|
|
32
36
|
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.config import (
|
|
33
37
|
OpenAICodeInterpreterConfig,
|
|
34
38
|
)
|
|
39
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors.artifacts import (
|
|
40
|
+
load_code_execution_metadata,
|
|
41
|
+
)
|
|
35
42
|
from unique_toolkit.agentic.tools.schemas import ToolPrompts
|
|
36
43
|
from unique_toolkit.content.schemas import (
|
|
37
44
|
Content,
|
|
@@ -62,13 +69,13 @@ def _build_upload_retry() -> AsyncRetrying:
|
|
|
62
69
|
_SHORT_TERM_MEMORY_NAME = "container_code_execution"
|
|
63
70
|
|
|
64
71
|
|
|
65
|
-
class
|
|
72
|
+
class _CodeExecutionShortTermMemorySchema(BaseModel):
|
|
66
73
|
container_id: str
|
|
67
|
-
|
|
74
|
+
file_paths: dict[str, str] = {}
|
|
68
75
|
|
|
69
76
|
|
|
70
77
|
CodeExecutionMemoryManager = PersistentShortMemoryManager[
|
|
71
|
-
|
|
78
|
+
_CodeExecutionShortTermMemorySchema
|
|
72
79
|
]
|
|
73
80
|
|
|
74
81
|
|
|
@@ -83,7 +90,7 @@ def _get_container_code_execution_short_term_memory_manager(
|
|
|
83
90
|
)
|
|
84
91
|
short_term_memory_manager = PersistentShortMemoryManager(
|
|
85
92
|
short_term_memory_service=short_term_memory_service,
|
|
86
|
-
short_term_memory_schema=
|
|
93
|
+
short_term_memory_schema=_CodeExecutionShortTermMemorySchema,
|
|
87
94
|
short_term_memory_name=_SHORT_TERM_MEMORY_NAME,
|
|
88
95
|
)
|
|
89
96
|
return short_term_memory_manager
|
|
@@ -91,7 +98,7 @@ def _get_container_code_execution_short_term_memory_manager(
|
|
|
91
98
|
|
|
92
99
|
async def _check_container_exists(
|
|
93
100
|
client: AsyncOpenAI,
|
|
94
|
-
memory:
|
|
101
|
+
memory: _CodeExecutionShortTermMemorySchema,
|
|
95
102
|
) -> bool:
|
|
96
103
|
try:
|
|
97
104
|
container = await client.containers.retrieve(memory.container_id)
|
|
@@ -129,27 +136,15 @@ async def _create_container(
|
|
|
129
136
|
return container.id
|
|
130
137
|
|
|
131
138
|
|
|
132
|
-
|
|
133
|
-
client: AsyncOpenAI,
|
|
139
|
+
def _check_file_already_uploaded(
|
|
134
140
|
content_id: str,
|
|
135
|
-
memory:
|
|
141
|
+
memory: _CodeExecutionShortTermMemorySchema,
|
|
136
142
|
) -> bool:
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
if content_id not in memory.file_ids:
|
|
143
|
+
if content_id not in memory.file_paths:
|
|
140
144
|
logger.info("File with id %s not in short term memory", content_id)
|
|
141
145
|
return False
|
|
142
146
|
|
|
143
|
-
|
|
144
|
-
try:
|
|
145
|
-
await client.containers.files.retrieve(
|
|
146
|
-
container_id=container_id, file_id=file_id
|
|
147
|
-
)
|
|
148
|
-
logger.info("File with id %s already uploaded to container", content_id)
|
|
149
|
-
return True
|
|
150
|
-
except OpenAIError: # Azure API Errors are not stable
|
|
151
|
-
logger.exception("Error while retrieving file %s", file_id)
|
|
152
|
-
return False
|
|
147
|
+
return True
|
|
153
148
|
|
|
154
149
|
|
|
155
150
|
async def _upload_file_to_container(
|
|
@@ -189,20 +184,17 @@ async def _upload_file_to_container(
|
|
|
189
184
|
container_id,
|
|
190
185
|
)
|
|
191
186
|
|
|
192
|
-
return openai_file.
|
|
187
|
+
return openai_file.path
|
|
193
188
|
|
|
194
189
|
|
|
195
190
|
async def _upload_files_to_container(
|
|
196
191
|
client: AsyncOpenAI,
|
|
197
192
|
uploaded_files: list[Content],
|
|
198
|
-
memory:
|
|
193
|
+
memory: _CodeExecutionShortTermMemorySchema,
|
|
199
194
|
content_service: ContentService,
|
|
200
|
-
) -> tuple[
|
|
201
|
-
|
|
195
|
+
) -> tuple[_CodeExecutionShortTermMemorySchema, bool]:
|
|
202
196
|
async def _check_and_upload(content: Content) -> str | None:
|
|
203
|
-
if
|
|
204
|
-
client=client, content_id=content.id, memory=memory
|
|
205
|
-
):
|
|
197
|
+
if _check_file_already_uploaded(content_id=content.id, memory=memory):
|
|
206
198
|
return None
|
|
207
199
|
|
|
208
200
|
return await _upload_file_to_container(
|
|
@@ -227,8 +219,8 @@ async def _upload_files_to_container(
|
|
|
227
219
|
|
|
228
220
|
updated = False
|
|
229
221
|
for content, result in zip(unique_contents, results):
|
|
230
|
-
if result.success and (
|
|
231
|
-
memory.
|
|
222
|
+
if result.success and (filepath := result.unpack()) is not None:
|
|
223
|
+
memory.file_paths[content.id] = filepath
|
|
232
224
|
updated = True
|
|
233
225
|
|
|
234
226
|
return memory, updated
|
|
@@ -263,6 +255,9 @@ class OpenAICodeInterpreterTool(OpenAIBuiltInTool[CodeInterpreter]):
|
|
|
263
255
|
container_id: str | None,
|
|
264
256
|
company_id: str = "",
|
|
265
257
|
is_exclusive: bool = False,
|
|
258
|
+
user_uploaded_files: list[str] | None = None,
|
|
259
|
+
kb_uploaded_files: list[str] | None = None,
|
|
260
|
+
code_execution_files: list[str] | None = None,
|
|
266
261
|
) -> None:
|
|
267
262
|
self._config = config
|
|
268
263
|
|
|
@@ -273,6 +268,10 @@ class OpenAICodeInterpreterTool(OpenAIBuiltInTool[CodeInterpreter]):
|
|
|
273
268
|
self._company_id = company_id
|
|
274
269
|
self._is_exclusive = is_exclusive
|
|
275
270
|
|
|
271
|
+
self._user_uploaded_files = user_uploaded_files
|
|
272
|
+
self._kb_uploaded_files = kb_uploaded_files
|
|
273
|
+
self._code_interpreter_artifacts = code_execution_files
|
|
274
|
+
|
|
276
275
|
@property
|
|
277
276
|
@override
|
|
278
277
|
def name(self) -> OpenAIBuiltInToolName:
|
|
@@ -334,7 +333,10 @@ class OpenAICodeInterpreterTool(OpenAIBuiltInTool[CodeInterpreter]):
|
|
|
334
333
|
chat_id=chat_id,
|
|
335
334
|
)
|
|
336
335
|
|
|
337
|
-
|
|
336
|
+
# Ignore old memory schema
|
|
337
|
+
memory = await failsafe_async(
|
|
338
|
+
failure_return_value=None, exceptions=(ValidationError,), log_exc_info=False
|
|
339
|
+
)(memory_manager.load_async)()
|
|
338
340
|
|
|
339
341
|
container_updated = False
|
|
340
342
|
if memory is None or not await _check_container_exists(
|
|
@@ -347,20 +349,32 @@ class OpenAICodeInterpreterTool(OpenAIBuiltInTool[CodeInterpreter]):
|
|
|
347
349
|
company_id=company_id,
|
|
348
350
|
expires_after_minutes=config.expires_after_minutes,
|
|
349
351
|
)
|
|
350
|
-
memory =
|
|
352
|
+
memory = _CodeExecutionShortTermMemorySchema(container_id=container_id)
|
|
351
353
|
container_updated = True
|
|
352
354
|
|
|
355
|
+
code_execution_files = []
|
|
356
|
+
user_uploaded_files = []
|
|
357
|
+
for content in uploaded_files:
|
|
358
|
+
if (metadata := load_code_execution_metadata(content)) is not None:
|
|
359
|
+
code_execution_files.append(content)
|
|
360
|
+
if metadata.container_id == memory.container_id:
|
|
361
|
+
# Already available in container
|
|
362
|
+
memory.file_paths[content.id] = metadata.filepath
|
|
363
|
+
else:
|
|
364
|
+
user_uploaded_files.append(content)
|
|
365
|
+
|
|
353
366
|
files_to_upload: list[Content] = []
|
|
367
|
+
|
|
354
368
|
if config.upload_files_in_chat_to_container:
|
|
355
369
|
files_to_upload.extend(uploaded_files)
|
|
356
370
|
|
|
371
|
+
kb_files = []
|
|
357
372
|
if config.additional_uploaded_documents:
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
content_ids=config.additional_uploaded_documents,
|
|
362
|
-
)
|
|
373
|
+
kb_files = await _resolve_kb_contents(
|
|
374
|
+
content_service=content_service,
|
|
375
|
+
content_ids=config.additional_uploaded_documents,
|
|
363
376
|
)
|
|
377
|
+
files_to_upload.extend(kb_files)
|
|
364
378
|
|
|
365
379
|
files_updated = False
|
|
366
380
|
if files_to_upload:
|
|
@@ -374,20 +388,36 @@ class OpenAICodeInterpreterTool(OpenAIBuiltInTool[CodeInterpreter]):
|
|
|
374
388
|
if container_updated or files_updated:
|
|
375
389
|
await memory_manager.save_async(memory)
|
|
376
390
|
|
|
391
|
+
def _extract_paths(contents: list[Content]) -> list[str]:
|
|
392
|
+
return [
|
|
393
|
+
memory.file_paths[content.id]
|
|
394
|
+
for content in contents
|
|
395
|
+
if content.id in memory.file_paths
|
|
396
|
+
]
|
|
397
|
+
|
|
377
398
|
return OpenAICodeInterpreterTool(
|
|
378
399
|
config=config,
|
|
379
400
|
container_id=memory.container_id,
|
|
380
401
|
company_id=company_id,
|
|
381
402
|
is_exclusive=is_exclusive,
|
|
403
|
+
user_uploaded_files=_extract_paths(user_uploaded_files),
|
|
404
|
+
kb_uploaded_files=_extract_paths(kb_files),
|
|
405
|
+
code_execution_files=_extract_paths(code_execution_files),
|
|
382
406
|
)
|
|
383
407
|
|
|
384
408
|
@override
|
|
385
409
|
def get_tool_prompts(self) -> ToolPrompts:
|
|
410
|
+
rendered_prompt = render_template(
|
|
411
|
+
self._config.tool_description_for_system_prompt,
|
|
412
|
+
user_uploaded_files=self._user_uploaded_files,
|
|
413
|
+
kb_uploaded_files=self._kb_uploaded_files,
|
|
414
|
+
code_interpreter_artifacts=self._code_interpreter_artifacts,
|
|
415
|
+
)
|
|
386
416
|
return ToolPrompts(
|
|
387
417
|
name="python", # https://platform.openai.com/docs/guides/tools-code-interpreter
|
|
388
418
|
display_name=self.DISPLAY_NAME,
|
|
389
419
|
tool_description=self._config.tool_description,
|
|
390
|
-
tool_system_prompt=
|
|
420
|
+
tool_system_prompt=rendered_prompt,
|
|
391
421
|
tool_format_information_for_system_prompt="",
|
|
392
422
|
tool_user_prompt=self._config.tool_description_for_user_prompt,
|
|
393
423
|
tool_format_information_for_user_prompt="",
|
|
@@ -1986,6 +1986,19 @@ class ChatService(ChatServiceDeprecated):
|
|
|
1986
1986
|
chat_id=self._content_scope_chat_id,
|
|
1987
1987
|
)
|
|
1988
1988
|
|
|
1989
|
+
@staticmethod
|
|
1990
|
+
def _filter_images_and_documents(
|
|
1991
|
+
contents: list[Content],
|
|
1992
|
+
) -> tuple[list[Content], list[Content]]:
|
|
1993
|
+
images: list[Content] = []
|
|
1994
|
+
files: list[Content] = []
|
|
1995
|
+
for c in contents:
|
|
1996
|
+
if is_file_content(filename=c.key):
|
|
1997
|
+
files.append(c)
|
|
1998
|
+
if is_image_content(filename=c.key):
|
|
1999
|
+
images.append(c)
|
|
2000
|
+
return images, files
|
|
2001
|
+
|
|
1989
2002
|
def download_chat_images_and_documents(self) -> tuple[list[Content], list[Content]]:
|
|
1990
2003
|
"""Return images and documents from the content-scope chat (e.g. parent chat when subagent).
|
|
1991
2004
|
|
|
@@ -1995,19 +2008,34 @@ class ChatService(ChatServiceDeprecated):
|
|
|
1995
2008
|
Returns:
|
|
1996
2009
|
tuple[list[Content], list[Content]]: (images, documents) from the content-scope chat.
|
|
1997
2010
|
"""
|
|
1998
|
-
|
|
1999
|
-
files: list[Content] = []
|
|
2000
|
-
for c in search_contents(
|
|
2011
|
+
contents = search_contents(
|
|
2001
2012
|
user_id=self._user_id,
|
|
2002
2013
|
company_id=self._company_id,
|
|
2003
2014
|
chat_id=self._content_scope_chat_id,
|
|
2004
2015
|
where={"ownerId": {"equals": self._content_scope_chat_id}},
|
|
2005
|
-
)
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2016
|
+
)
|
|
2017
|
+
return self._filter_images_and_documents(contents)
|
|
2018
|
+
|
|
2019
|
+
async def download_chat_images_and_documents_async(
|
|
2020
|
+
self,
|
|
2021
|
+
) -> tuple[list[Content], list[Content]]:
|
|
2022
|
+
"""Async version of download_chat_images_and_documents.
|
|
2023
|
+
|
|
2024
|
+
Return images and documents from the content-scope chat (e.g. parent chat when subagent).
|
|
2025
|
+
|
|
2026
|
+
Uses the service's content-scope chat id, so when running as a subagent
|
|
2027
|
+
with correlation, this accesses files from the primary chat session.
|
|
2028
|
+
|
|
2029
|
+
Returns:
|
|
2030
|
+
tuple[list[Content], list[Content]]: (images, documents) from the content-scope chat.
|
|
2031
|
+
"""
|
|
2032
|
+
contents = await search_contents_async(
|
|
2033
|
+
user_id=self._user_id,
|
|
2034
|
+
company_id=self._company_id,
|
|
2035
|
+
chat_id=self._content_scope_chat_id,
|
|
2036
|
+
where={"ownerId": {"equals": self._content_scope_chat_id}},
|
|
2037
|
+
)
|
|
2038
|
+
return self._filter_images_and_documents(contents)
|
|
2011
2039
|
|
|
2012
2040
|
async def search_content_chunks_async(
|
|
2013
2041
|
self,
|
|
File without changes
|
|
File without changes
|
{unique_toolkit-2026.22.0.dev0 → unique_toolkit-2026.22.0.dev2}/unique_toolkit/_common/__init__.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
|