unique-toolkit 2026.30.0.dev16__tar.gz → 2026.30.0.dev18__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.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/PKG-INFO +1 -1
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/pyproject.toml +1 -1
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -10
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +11 -3
- unique_toolkit-2026.30.0.dev18/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/__init__.py +11 -0
- unique_toolkit-2026.30.0.dev18/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/config.py +23 -0
- unique_toolkit-2026.30.0.dev18/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/service.py +110 -0
- unique_toolkit-2026.30.0.dev18/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/__init__.py +5 -0
- unique_toolkit-2026.30.0.dev18/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_container.py +50 -0
- unique_toolkit-2026.30.0.dev18/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_files.py +152 -0
- unique_toolkit-2026.30.0.dev18/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_memory.py +35 -0
- unique_toolkit-2026.30.0.dev18/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/builder.py +166 -0
- unique_toolkit-2026.30.0.dev18/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +67 -0
- unique_toolkit-2026.30.0.dev18/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/__init__.py +11 -0
- {unique_toolkit-2026.30.0.dev16/unique_toolkit/agentic/tools/openai_builtin/code_interpreter → unique_toolkit-2026.30.0.dev18/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool}/config.py +1 -41
- unique_toolkit-2026.30.0.dev18/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/service.py +108 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/openai_builtin/manager.py +43 -29
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/tool_manager.py +67 -8
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/app/init_logging.py +3 -1
- unique_toolkit-2026.30.0.dev16/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -449
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/README.md +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/metadata_filter_scope.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/tests/test_hallucination_external_context.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/history_manager/settings.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/message_log_order.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/reference_manager/tests/test_external_context.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/ask_user_tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/ask_user_tool/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/ask_user_tool/tool.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/names.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/run_context.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/agentic_table/synthetic_chat_event.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/app/feature_flags.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/app/find_env_file.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/chat/deprecated/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/README.md +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/_internal/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/_base.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/content_tree/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/internal_search/base/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/identity/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/feature_flags/README.md +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/feature_flags/_graphql_client.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/feature_flags/_ttl_cache.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/feature_flags/client.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/feature_flags/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/feature_flags/settings.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/group/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/group/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/user/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/resources/user/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/experimental/testing/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/language_model/settings.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/monitoring/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/monitoring/gunicorn.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/monitoring/middleware.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/monitoring/registry.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/services/chat_service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/services/factory.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-2026.30.0.dev16 → unique_toolkit-2026.30.0.dev18}/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.30.0.
|
|
3
|
+
Version: 2026.30.0.dev18
|
|
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>
|
|
@@ -2,7 +2,6 @@ from abc import ABC, abstractmethod
|
|
|
2
2
|
from enum import StrEnum
|
|
3
3
|
from typing import Generic, TypeVar
|
|
4
4
|
|
|
5
|
-
from openai.types.responses import ResponseIncludable
|
|
6
5
|
from openai.types.responses.tool_param import CodeInterpreter
|
|
7
6
|
|
|
8
7
|
from unique_toolkit.agentic.tools.schemas import ToolPrompts
|
|
@@ -52,12 +51,3 @@ class OpenAIBuiltInTool(ABC, Generic[ToolType]):
|
|
|
52
51
|
Default: False.
|
|
53
52
|
"""
|
|
54
53
|
return False
|
|
55
|
-
|
|
56
|
-
def get_required_include_params(self) -> list[ResponseIncludable]:
|
|
57
|
-
"""Return Responses API `include` values required by this tool.
|
|
58
|
-
|
|
59
|
-
Subclasses override this when they need additional data attached to the
|
|
60
|
-
response (e.g. code interpreter execution logs). The default is an
|
|
61
|
-
empty list, meaning no extra includes are needed.
|
|
62
|
-
"""
|
|
63
|
-
return []
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.
|
|
2
|
-
|
|
1
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.activator import (
|
|
2
|
+
CodeInterpreterActivatorConfig,
|
|
3
|
+
CodeInterpreterActivatorTool,
|
|
4
|
+
)
|
|
5
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.builder import (
|
|
6
|
+
CodeInterpreterBuilder,
|
|
3
7
|
)
|
|
4
8
|
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors import (
|
|
5
9
|
DisplayCodeInterpreterFilesPostProcessor,
|
|
@@ -7,11 +11,15 @@ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors
|
|
|
7
11
|
ShowExecutedCodePostprocessor,
|
|
8
12
|
ShowExecutedCodePostprocessorConfig,
|
|
9
13
|
)
|
|
10
|
-
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.
|
|
14
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.tool import (
|
|
15
|
+
OpenAICodeInterpreterConfig,
|
|
11
16
|
OpenAICodeInterpreterTool,
|
|
12
17
|
)
|
|
13
18
|
|
|
14
19
|
__all__ = [
|
|
20
|
+
"CodeInterpreterActivatorConfig",
|
|
21
|
+
"CodeInterpreterActivatorTool",
|
|
22
|
+
"CodeInterpreterBuilder",
|
|
15
23
|
"OpenAICodeInterpreterConfig",
|
|
16
24
|
"OpenAICodeInterpreterTool",
|
|
17
25
|
"ShowExecutedCodePostprocessor",
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.activator.config import (
|
|
2
|
+
CodeInterpreterActivatorConfig,
|
|
3
|
+
)
|
|
4
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.activator.service import (
|
|
5
|
+
CodeInterpreterActivatorTool,
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
__all__ = [
|
|
9
|
+
"CodeInterpreterActivatorConfig",
|
|
10
|
+
"CodeInterpreterActivatorTool",
|
|
11
|
+
]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from pydantic import Field
|
|
2
|
+
|
|
3
|
+
from unique_toolkit.agentic.tools.schemas import (
|
|
4
|
+
BaseToolConfig,
|
|
5
|
+
)
|
|
6
|
+
|
|
7
|
+
_DEFAULT_TOOL_DESCRIPTION = """
|
|
8
|
+
Activate the code interpreter to run Python in a secure environment for
|
|
9
|
+
calculations, data analysis, processing uploaded files (including spreadsheets),
|
|
10
|
+
plotting and data visualization, and generating downloadable files.
|
|
11
|
+
|
|
12
|
+
CRITICAL: Act as though these capabilities are already available: whenever they are useful, call this tool
|
|
13
|
+
silently and proceed. Never mention this tool, its activation, or its setup to the user.
|
|
14
|
+
""".strip()
|
|
15
|
+
|
|
16
|
+
_DEFAULT_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT = _DEFAULT_TOOL_DESCRIPTION
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class CodeInterpreterActivatorConfig(BaseToolConfig):
|
|
20
|
+
tool_description: str = Field(default=_DEFAULT_TOOL_DESCRIPTION)
|
|
21
|
+
tool_description_for_system_prompt: str = (
|
|
22
|
+
_DEFAULT_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT
|
|
23
|
+
)
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import logging
|
|
3
|
+
from typing import override
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, Field
|
|
6
|
+
|
|
7
|
+
from unique_toolkit.agentic.evaluation.schemas import EvaluationMetricName
|
|
8
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.activator.config import (
|
|
9
|
+
CodeInterpreterActivatorConfig,
|
|
10
|
+
)
|
|
11
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.builder import (
|
|
12
|
+
CodeInterpreterBuilder,
|
|
13
|
+
)
|
|
14
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.tool import (
|
|
15
|
+
OpenAICodeInterpreterTool,
|
|
16
|
+
)
|
|
17
|
+
from unique_toolkit.agentic.tools.schemas import (
|
|
18
|
+
ToolCallResponse,
|
|
19
|
+
)
|
|
20
|
+
from unique_toolkit.agentic.tools.tool import Tool
|
|
21
|
+
from unique_toolkit.language_model.schemas import (
|
|
22
|
+
LanguageModelFunction,
|
|
23
|
+
LanguageModelToolDescription,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
logger = logging.getLogger(__name__)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class _CodeParams(BaseModel):
|
|
30
|
+
arg: bool = Field(True, description="Ignored Argument.")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class CodeInterpreterActivatorTool(Tool[CodeInterpreterActivatorConfig]):
|
|
34
|
+
NAME = "ActivatePython"
|
|
35
|
+
DISPLAY_NAME = "Activate Python"
|
|
36
|
+
|
|
37
|
+
name = NAME
|
|
38
|
+
|
|
39
|
+
def __init__(
|
|
40
|
+
self,
|
|
41
|
+
config: CodeInterpreterActivatorConfig,
|
|
42
|
+
builder: CodeInterpreterBuilder,
|
|
43
|
+
) -> None:
|
|
44
|
+
super().__init__(config=config)
|
|
45
|
+
self._builder = builder
|
|
46
|
+
self._built_tool: OpenAICodeInterpreterTool | None = None
|
|
47
|
+
self._activation_lock = asyncio.Lock()
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def is_activated(self) -> bool:
|
|
51
|
+
return self._built_tool is not None
|
|
52
|
+
|
|
53
|
+
def get_activated_tool(self) -> OpenAICodeInterpreterTool:
|
|
54
|
+
if self._built_tool is None:
|
|
55
|
+
raise RuntimeError(
|
|
56
|
+
"Code interpreter tool is not activated yet; call `run` first."
|
|
57
|
+
)
|
|
58
|
+
return self._built_tool
|
|
59
|
+
|
|
60
|
+
@override
|
|
61
|
+
def display_name(self) -> str:
|
|
62
|
+
return self.DISPLAY_NAME
|
|
63
|
+
|
|
64
|
+
@override
|
|
65
|
+
def is_enabled(self) -> bool:
|
|
66
|
+
return True
|
|
67
|
+
|
|
68
|
+
@override
|
|
69
|
+
def is_exclusive(self) -> bool:
|
|
70
|
+
return False
|
|
71
|
+
|
|
72
|
+
@override
|
|
73
|
+
def is_capability(self) -> bool:
|
|
74
|
+
return True
|
|
75
|
+
|
|
76
|
+
@override
|
|
77
|
+
def tool_description(self) -> LanguageModelToolDescription:
|
|
78
|
+
return LanguageModelToolDescription(
|
|
79
|
+
name=self.name,
|
|
80
|
+
description=self.config.tool_description,
|
|
81
|
+
parameters=_CodeParams,
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
@override
|
|
85
|
+
def tool_description_for_system_prompt(self) -> str:
|
|
86
|
+
return self.config.tool_description_for_system_prompt
|
|
87
|
+
|
|
88
|
+
@override
|
|
89
|
+
def evaluation_check_list(self) -> list[EvaluationMetricName]:
|
|
90
|
+
return []
|
|
91
|
+
|
|
92
|
+
@override
|
|
93
|
+
def get_evaluation_checks_based_on_tool_response(
|
|
94
|
+
self,
|
|
95
|
+
tool_response: ToolCallResponse,
|
|
96
|
+
) -> list[EvaluationMetricName]:
|
|
97
|
+
return []
|
|
98
|
+
|
|
99
|
+
@override
|
|
100
|
+
async def run(self, tool_call: LanguageModelFunction) -> ToolCallResponse:
|
|
101
|
+
async with self._activation_lock:
|
|
102
|
+
if self._built_tool is None:
|
|
103
|
+
logger.info("Building code interpreter tool")
|
|
104
|
+
self._built_tool = await self._builder.build()
|
|
105
|
+
|
|
106
|
+
return ToolCallResponse(
|
|
107
|
+
id=tool_call.id,
|
|
108
|
+
name=self.name,
|
|
109
|
+
content="The python tool is now active. You may execute python code.",
|
|
110
|
+
)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
from openai import AsyncOpenAI
|
|
4
|
+
|
|
5
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.builder._memory import (
|
|
6
|
+
CodeExecutionShortTermMemorySchema,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
logger = logging.getLogger(__name__)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
async def check_container_exists(
|
|
13
|
+
client: AsyncOpenAI,
|
|
14
|
+
memory: CodeExecutionShortTermMemorySchema,
|
|
15
|
+
) -> bool:
|
|
16
|
+
try:
|
|
17
|
+
container = await client.containers.retrieve(memory.container_id)
|
|
18
|
+
# The error here is sometimes InternalServerError, and sometimes a NotFoundError. We catch everything and re-create on exception
|
|
19
|
+
except Exception:
|
|
20
|
+
logger.exception("Container %s not found", memory.container_id)
|
|
21
|
+
return False
|
|
22
|
+
|
|
23
|
+
if container.status not in ["active", "running"]:
|
|
24
|
+
logger.info(
|
|
25
|
+
"Container %s has status `%s`, recreating a new one",
|
|
26
|
+
memory.container_id,
|
|
27
|
+
container.status,
|
|
28
|
+
)
|
|
29
|
+
return False
|
|
30
|
+
|
|
31
|
+
logger.info("Container %s found in short term memory", memory.container_id)
|
|
32
|
+
return True
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
async def create_container(
|
|
36
|
+
client: AsyncOpenAI,
|
|
37
|
+
chat_id: str,
|
|
38
|
+
user_id: str,
|
|
39
|
+
company_id: str,
|
|
40
|
+
expires_after_minutes: int,
|
|
41
|
+
) -> str:
|
|
42
|
+
container = await client.containers.create(
|
|
43
|
+
name=f"code_execution_{company_id}_{user_id}_{chat_id}",
|
|
44
|
+
expires_after={
|
|
45
|
+
"anchor": "last_active_at",
|
|
46
|
+
"minutes": expires_after_minutes,
|
|
47
|
+
},
|
|
48
|
+
)
|
|
49
|
+
logger.info("Created new container %s", container.id)
|
|
50
|
+
return container.id
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import logging
|
|
3
|
+
|
|
4
|
+
from openai import AsyncOpenAI
|
|
5
|
+
from tenacity import (
|
|
6
|
+
AsyncRetrying,
|
|
7
|
+
before_sleep_log,
|
|
8
|
+
stop_after_attempt,
|
|
9
|
+
wait_exponential,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
from unique_toolkit import ContentService
|
|
13
|
+
from unique_toolkit._common.execution import (
|
|
14
|
+
SafeTaskExecutor,
|
|
15
|
+
)
|
|
16
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.builder._memory import (
|
|
17
|
+
CodeExecutionShortTermMemorySchema,
|
|
18
|
+
)
|
|
19
|
+
from unique_toolkit.content.schemas import (
|
|
20
|
+
Content,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
logger = logging.getLogger(__name__)
|
|
24
|
+
|
|
25
|
+
UPLOAD_MAX_RETRIES = 2
|
|
26
|
+
UPLOAD_RETRY_BASE_DELAY = 0.5
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def build_upload_retry() -> AsyncRetrying:
|
|
30
|
+
"""Exponential-backoff retry policy for transient upload/download failures.
|
|
31
|
+
|
|
32
|
+
Matches the pattern used in the ``DisplayCodeInterpreterFilesPostProcessor``
|
|
33
|
+
so that every outbound I/O call gets the same behaviour: up to
|
|
34
|
+
``UPLOAD_MAX_RETRIES`` extra attempts, doubling the wait each time,
|
|
35
|
+
with a WARNING log before each sleep.
|
|
36
|
+
"""
|
|
37
|
+
return AsyncRetrying(
|
|
38
|
+
stop=stop_after_attempt(1 + UPLOAD_MAX_RETRIES),
|
|
39
|
+
wait=wait_exponential(multiplier=UPLOAD_RETRY_BASE_DELAY),
|
|
40
|
+
before_sleep=before_sleep_log(logger, logging.WARNING),
|
|
41
|
+
reraise=True,
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def check_file_already_uploaded(
|
|
46
|
+
content_id: str,
|
|
47
|
+
memory: CodeExecutionShortTermMemorySchema,
|
|
48
|
+
) -> bool:
|
|
49
|
+
if content_id not in memory.file_paths:
|
|
50
|
+
logger.info("File with id %s not in short term memory", content_id)
|
|
51
|
+
return False
|
|
52
|
+
|
|
53
|
+
return True
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
async def upload_file_to_container(
|
|
57
|
+
client: AsyncOpenAI,
|
|
58
|
+
content_id: str,
|
|
59
|
+
filename: str,
|
|
60
|
+
content_service: ContentService,
|
|
61
|
+
container_id: str,
|
|
62
|
+
) -> str:
|
|
63
|
+
logger.info(
|
|
64
|
+
"Uploading file %s (%s) to container %s",
|
|
65
|
+
content_id,
|
|
66
|
+
filename,
|
|
67
|
+
container_id,
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
file_content = await build_upload_retry()(
|
|
71
|
+
content_service.download_content_to_bytes_async,
|
|
72
|
+
content_id=content_id,
|
|
73
|
+
)
|
|
74
|
+
logger.info(
|
|
75
|
+
"Downloaded %d bytes for file %s; uploading to container %s",
|
|
76
|
+
len(file_content),
|
|
77
|
+
content_id,
|
|
78
|
+
container_id,
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
openai_file = await build_upload_retry()(
|
|
82
|
+
client.containers.files.create,
|
|
83
|
+
container_id=container_id,
|
|
84
|
+
file=(filename, file_content),
|
|
85
|
+
)
|
|
86
|
+
logger.info(
|
|
87
|
+
"File %s successfully uploaded as OpenAI file %s in container %s",
|
|
88
|
+
content_id,
|
|
89
|
+
openai_file.id,
|
|
90
|
+
container_id,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
return openai_file.path
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
async def upload_files_to_container(
|
|
97
|
+
client: AsyncOpenAI,
|
|
98
|
+
uploaded_files: list[Content],
|
|
99
|
+
memory: CodeExecutionShortTermMemorySchema,
|
|
100
|
+
content_service: ContentService,
|
|
101
|
+
) -> tuple[CodeExecutionShortTermMemorySchema, bool]:
|
|
102
|
+
async def _check_and_upload(content: Content) -> str | None:
|
|
103
|
+
if check_file_already_uploaded(content_id=content.id, memory=memory):
|
|
104
|
+
return None
|
|
105
|
+
|
|
106
|
+
return await upload_file_to_container(
|
|
107
|
+
client=client,
|
|
108
|
+
content_id=content.id,
|
|
109
|
+
filename=content.key,
|
|
110
|
+
content_service=content_service,
|
|
111
|
+
container_id=memory.container_id,
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
# Deduplicate
|
|
115
|
+
unique_contents = {content.id: content for content in uploaded_files}.values()
|
|
116
|
+
|
|
117
|
+
executor = SafeTaskExecutor(logger=logger)
|
|
118
|
+
|
|
119
|
+
results = await asyncio.gather(
|
|
120
|
+
*(
|
|
121
|
+
executor.execute_async(_check_and_upload, content)
|
|
122
|
+
for content in unique_contents
|
|
123
|
+
),
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
updated = False
|
|
127
|
+
for content, result in zip(unique_contents, results):
|
|
128
|
+
if result.success and (filepath := result.unpack()) is not None:
|
|
129
|
+
memory.file_paths[content.id] = filepath
|
|
130
|
+
updated = True
|
|
131
|
+
|
|
132
|
+
return memory, updated
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
async def resolve_kb_contents(
|
|
136
|
+
content_service: ContentService,
|
|
137
|
+
content_ids: list[str],
|
|
138
|
+
) -> list[Content]:
|
|
139
|
+
contents = await content_service.search_contents_async(
|
|
140
|
+
where={"id": {"in": content_ids}},
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
found_ids = {c.id for c in contents}
|
|
144
|
+
missing = [content_id for content_id in content_ids if content_id not in found_ids]
|
|
145
|
+
if missing:
|
|
146
|
+
logger.warning(
|
|
147
|
+
"additional_uploaded_documents: %d content ids not found or not accessible in KB: %s",
|
|
148
|
+
len(missing),
|
|
149
|
+
missing,
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
return contents
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from openai import BaseModel
|
|
2
|
+
|
|
3
|
+
from unique_toolkit import ShortTermMemoryService
|
|
4
|
+
from unique_toolkit.agentic.short_term_memory_manager.persistent_short_term_memory_manager import (
|
|
5
|
+
PersistentShortMemoryManager,
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
SHORT_TERM_MEMORY_NAME = "container_code_execution"
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class CodeExecutionShortTermMemorySchema(BaseModel):
|
|
12
|
+
container_id: str
|
|
13
|
+
file_paths: dict[str, str] = {}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
CodeExecutionMemoryManager = PersistentShortMemoryManager[
|
|
17
|
+
CodeExecutionShortTermMemorySchema
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def get_container_code_execution_short_term_memory_manager(
|
|
22
|
+
company_id: str, user_id: str, chat_id: str
|
|
23
|
+
) -> CodeExecutionMemoryManager:
|
|
24
|
+
short_term_memory_service = ShortTermMemoryService(
|
|
25
|
+
company_id=company_id,
|
|
26
|
+
user_id=user_id,
|
|
27
|
+
chat_id=chat_id,
|
|
28
|
+
message_id=None,
|
|
29
|
+
)
|
|
30
|
+
short_term_memory_manager = PersistentShortMemoryManager(
|
|
31
|
+
short_term_memory_service=short_term_memory_service,
|
|
32
|
+
short_term_memory_schema=CodeExecutionShortTermMemorySchema,
|
|
33
|
+
short_term_memory_name=SHORT_TERM_MEMORY_NAME,
|
|
34
|
+
)
|
|
35
|
+
return short_term_memory_manager
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
from openai import AsyncOpenAI
|
|
4
|
+
from pydantic import ValidationError
|
|
5
|
+
|
|
6
|
+
from unique_toolkit import ContentService
|
|
7
|
+
from unique_toolkit._common.execution import (
|
|
8
|
+
failsafe_async,
|
|
9
|
+
)
|
|
10
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.builder._container import (
|
|
11
|
+
check_container_exists,
|
|
12
|
+
create_container,
|
|
13
|
+
)
|
|
14
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.builder._files import (
|
|
15
|
+
resolve_kb_contents,
|
|
16
|
+
upload_files_to_container,
|
|
17
|
+
)
|
|
18
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.builder._memory import (
|
|
19
|
+
CodeExecutionShortTermMemorySchema,
|
|
20
|
+
get_container_code_execution_short_term_memory_manager,
|
|
21
|
+
)
|
|
22
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors.artifacts import (
|
|
23
|
+
load_code_execution_metadata,
|
|
24
|
+
)
|
|
25
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.tool import (
|
|
26
|
+
OpenAICodeInterpreterConfig,
|
|
27
|
+
OpenAICodeInterpreterTool,
|
|
28
|
+
)
|
|
29
|
+
from unique_toolkit.content.schemas import (
|
|
30
|
+
Content,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
logger = logging.getLogger(__name__)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class CodeInterpreterBuilder:
|
|
37
|
+
"""Provisions an ``OpenAICodeInterpreterTool``.
|
|
38
|
+
|
|
39
|
+
Owns the construction side of the code interpreter: warm-container reuse
|
|
40
|
+
via short-term memory, container creation, chat/KB file uploads, and the
|
|
41
|
+
final tool instantiation. The tool class itself stays a pure runtime
|
|
42
|
+
representation.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
def __init__(
|
|
46
|
+
self,
|
|
47
|
+
config: OpenAICodeInterpreterConfig,
|
|
48
|
+
uploaded_files: list[Content],
|
|
49
|
+
client: AsyncOpenAI,
|
|
50
|
+
content_service: ContentService,
|
|
51
|
+
company_id: str,
|
|
52
|
+
user_id: str,
|
|
53
|
+
chat_id: str,
|
|
54
|
+
is_exclusive: bool = False,
|
|
55
|
+
force_auto_container: bool = False,
|
|
56
|
+
) -> None:
|
|
57
|
+
self._config = config
|
|
58
|
+
self._uploaded_files = uploaded_files
|
|
59
|
+
self._client = client
|
|
60
|
+
self._content_service = content_service
|
|
61
|
+
self._company_id = company_id
|
|
62
|
+
self._user_id = user_id
|
|
63
|
+
self._chat_id = chat_id
|
|
64
|
+
self._is_exclusive = is_exclusive
|
|
65
|
+
self._force_auto_container = force_auto_container
|
|
66
|
+
|
|
67
|
+
async def build(self) -> OpenAICodeInterpreterTool:
|
|
68
|
+
is_exclusive = self._is_exclusive
|
|
69
|
+
force_auto_container = self._force_auto_container
|
|
70
|
+
config = self._config
|
|
71
|
+
uploaded_files = self._uploaded_files
|
|
72
|
+
client = self._client
|
|
73
|
+
content_service = self._content_service
|
|
74
|
+
company_id = self._company_id
|
|
75
|
+
user_id = self._user_id
|
|
76
|
+
chat_id = self._chat_id
|
|
77
|
+
|
|
78
|
+
if force_auto_container:
|
|
79
|
+
config = config.model_copy(update={"use_auto_container": True})
|
|
80
|
+
|
|
81
|
+
if config.use_auto_container:
|
|
82
|
+
logger.info("Using `auto` container setting")
|
|
83
|
+
return OpenAICodeInterpreterTool(
|
|
84
|
+
config=config,
|
|
85
|
+
container_id=None,
|
|
86
|
+
company_id=company_id,
|
|
87
|
+
is_exclusive=is_exclusive,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
memory_manager = get_container_code_execution_short_term_memory_manager(
|
|
91
|
+
company_id=company_id,
|
|
92
|
+
user_id=user_id,
|
|
93
|
+
chat_id=chat_id,
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
# Ignore old memory schema
|
|
97
|
+
memory = await failsafe_async(
|
|
98
|
+
failure_return_value=None, exceptions=(ValidationError,), log_exc_info=False
|
|
99
|
+
)(memory_manager.load_async)()
|
|
100
|
+
|
|
101
|
+
container_updated = False
|
|
102
|
+
if memory is None or not await check_container_exists(
|
|
103
|
+
client=client, memory=memory
|
|
104
|
+
):
|
|
105
|
+
container_id = await create_container(
|
|
106
|
+
client=client,
|
|
107
|
+
chat_id=chat_id,
|
|
108
|
+
user_id=user_id,
|
|
109
|
+
company_id=company_id,
|
|
110
|
+
expires_after_minutes=config.expires_after_minutes,
|
|
111
|
+
)
|
|
112
|
+
memory = CodeExecutionShortTermMemorySchema(container_id=container_id)
|
|
113
|
+
container_updated = True
|
|
114
|
+
|
|
115
|
+
code_execution_files = []
|
|
116
|
+
user_uploaded_files = []
|
|
117
|
+
for content in uploaded_files:
|
|
118
|
+
if (metadata := load_code_execution_metadata(content)) is not None:
|
|
119
|
+
code_execution_files.append(content)
|
|
120
|
+
if metadata.container_id == memory.container_id:
|
|
121
|
+
# Already available in container
|
|
122
|
+
memory.file_paths[content.id] = metadata.filepath
|
|
123
|
+
else:
|
|
124
|
+
user_uploaded_files.append(content)
|
|
125
|
+
|
|
126
|
+
files_to_upload: list[Content] = []
|
|
127
|
+
|
|
128
|
+
if config.upload_files_in_chat_to_container:
|
|
129
|
+
files_to_upload.extend(uploaded_files)
|
|
130
|
+
|
|
131
|
+
kb_files = []
|
|
132
|
+
if config.additional_uploaded_documents:
|
|
133
|
+
kb_files = await resolve_kb_contents(
|
|
134
|
+
content_service=content_service,
|
|
135
|
+
content_ids=config.additional_uploaded_documents,
|
|
136
|
+
)
|
|
137
|
+
files_to_upload.extend(kb_files)
|
|
138
|
+
|
|
139
|
+
files_updated = False
|
|
140
|
+
if files_to_upload:
|
|
141
|
+
memory, files_updated = await upload_files_to_container(
|
|
142
|
+
client=client,
|
|
143
|
+
uploaded_files=files_to_upload,
|
|
144
|
+
content_service=content_service,
|
|
145
|
+
memory=memory,
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
if container_updated or files_updated:
|
|
149
|
+
await memory_manager.save_async(memory)
|
|
150
|
+
|
|
151
|
+
def _extract_paths(contents: list[Content]) -> list[str]:
|
|
152
|
+
return [
|
|
153
|
+
memory.file_paths[content.id]
|
|
154
|
+
for content in contents
|
|
155
|
+
if content.id in memory.file_paths
|
|
156
|
+
]
|
|
157
|
+
|
|
158
|
+
return OpenAICodeInterpreterTool(
|
|
159
|
+
config=config,
|
|
160
|
+
container_id=memory.container_id,
|
|
161
|
+
company_id=company_id,
|
|
162
|
+
is_exclusive=is_exclusive,
|
|
163
|
+
user_uploaded_files=_extract_paths(user_uploaded_files),
|
|
164
|
+
kb_uploaded_files=_extract_paths(kb_files),
|
|
165
|
+
code_execution_files=_extract_paths(code_execution_files),
|
|
166
|
+
)
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
from typing import Annotated
|
|
2
|
+
|
|
3
|
+
from pydantic import Field, field_validator
|
|
4
|
+
|
|
5
|
+
from unique_toolkit._common.config_checker import register_config
|
|
6
|
+
from unique_toolkit.agentic.tools.factory import ToolFactory
|
|
7
|
+
from unique_toolkit.agentic.tools.openai_builtin.base import (
|
|
8
|
+
OpenAIBuiltInToolName,
|
|
9
|
+
)
|
|
10
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.activator import (
|
|
11
|
+
CodeInterpreterActivatorConfig,
|
|
12
|
+
)
|
|
13
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors.code_display import (
|
|
14
|
+
ShowExecutedCodePostprocessorConfig,
|
|
15
|
+
)
|
|
16
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors.generated_files import (
|
|
17
|
+
DisplayCodeInterpreterFilesPostProcessorConfig,
|
|
18
|
+
)
|
|
19
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.tool import (
|
|
20
|
+
OpenAICodeInterpreterConfig,
|
|
21
|
+
)
|
|
22
|
+
from unique_toolkit.agentic.tools.schemas import BaseToolConfig
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@register_config()
|
|
26
|
+
class CodeInterpreterExtendedConfig(BaseToolConfig):
|
|
27
|
+
generated_files_config: DisplayCodeInterpreterFilesPostProcessorConfig = Field(
|
|
28
|
+
default=DisplayCodeInterpreterFilesPostProcessorConfig(),
|
|
29
|
+
title="Generated files",
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
executed_code_display_config: ShowExecutedCodePostprocessorConfig = Field(
|
|
33
|
+
default=ShowExecutedCodePostprocessorConfig(),
|
|
34
|
+
title="Code display",
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
activator_config: (
|
|
38
|
+
Annotated[
|
|
39
|
+
CodeInterpreterActivatorConfig,
|
|
40
|
+
Field(
|
|
41
|
+
title="Active",
|
|
42
|
+
description="Configuration for the tool allowing the model to request code execution.",
|
|
43
|
+
),
|
|
44
|
+
]
|
|
45
|
+
| Annotated[None, Field(title="Deactivated")]
|
|
46
|
+
) = Field(
|
|
47
|
+
default=None,
|
|
48
|
+
title="Deferred Resource Provisioning",
|
|
49
|
+
description="If active, the resources for code execution are not provisioned eagerly but only when the model indicates that it needs the tool.",
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
@field_validator("executed_code_display_config", mode="before")
|
|
53
|
+
@classmethod
|
|
54
|
+
def _default_executed_code_display_config(cls, v):
|
|
55
|
+
if v is None:
|
|
56
|
+
return ShowExecutedCodePostprocessorConfig()
|
|
57
|
+
return v
|
|
58
|
+
|
|
59
|
+
tool_config: OpenAICodeInterpreterConfig = Field(
|
|
60
|
+
default=OpenAICodeInterpreterConfig(),
|
|
61
|
+
title="Tool",
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
ToolFactory.register_tool_config(
|
|
66
|
+
OpenAIBuiltInToolName.CODE_INTERPRETER, CodeInterpreterExtendedConfig
|
|
67
|
+
)
|