unique-toolkit 2026.30.0.dev15__tar.gz → 2026.30.0.dev17__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.dev15 → unique_toolkit-2026.30.0.dev17}/PKG-INFO +2 -2
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/pyproject.toml +2 -2
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +97 -19
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -10
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +11 -3
- unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/__init__.py +11 -0
- unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/config.py +23 -0
- unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/service.py +110 -0
- unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/__init__.py +5 -0
- unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_container.py +50 -0
- unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_files.py +152 -0
- unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_memory.py +35 -0
- unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/builder.py +166 -0
- unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +67 -0
- unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/__init__.py +11 -0
- {unique_toolkit-2026.30.0.dev15/unique_toolkit/agentic/tools/openai_builtin/code_interpreter → unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool}/config.py +1 -41
- unique_toolkit-2026.30.0.dev17/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/service.py +108 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/manager.py +43 -29
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/tool_manager.py +67 -8
- unique_toolkit-2026.30.0.dev15/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -449
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/README.md +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/metadata_filter_scope.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/tests/test_hallucination_external_context.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/history_manager/settings.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/message_log_order.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/reference_manager/tests/test_external_context.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/ask_user_tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/ask_user_tool/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/ask_user_tool/tool.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/names.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/run_context.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/agentic_table/synthetic_chat_event.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/feature_flags.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/find_env_file.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/deprecated/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/README.md +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/_internal/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/_base.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/content_tree/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/base/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/identity/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/feature_flags/README.md +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/feature_flags/_graphql_client.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/feature_flags/_ttl_cache.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/feature_flags/client.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/feature_flags/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/feature_flags/settings.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/group/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/group/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/user/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/resources/user/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/experimental/testing/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/settings.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/monitoring/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/monitoring/gunicorn.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/monitoring/middleware.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/monitoring/registry.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/services/chat_service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/services/factory.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-2026.30.0.dev15 → unique_toolkit-2026.30.0.dev17}/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.dev17
|
|
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.30.0.
|
|
19
|
+
Requires-Dist: unique-sdk>=2026.30.0.dev8,<2026.30.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.30.0.
|
|
3
|
+
version = "2026.30.0.dev17"
|
|
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.30.0.
|
|
31
|
+
"unique-sdk>=2026.30.0.dev8,<2026.30.0rc0",
|
|
32
32
|
"jambo>=0.1.2,<0.2",
|
|
33
33
|
"jinja2>=3.1.6,<4",
|
|
34
34
|
"docxtpl>=0.20.1,<0.21",
|
|
@@ -37,6 +37,37 @@ from unique_toolkit.services.factory import UniqueServiceFactory
|
|
|
37
37
|
MAX_INPUT_TOKENS_SAFETY_PERCENTAGE = env_settings.input_correction_reduction_factor
|
|
38
38
|
SAFETY_MARGIN_FOR_AGGRESSIVE_REDUCTION = env_settings.input_aggressive_reduction_factor
|
|
39
39
|
|
|
40
|
+
PLAIN_TEXT_TRUNCATION_MARKER = "\n\n[... tool response too long and was truncated]"
|
|
41
|
+
# TODO: Make this configurable
|
|
42
|
+
MIN_PLAIN_TEXT_CHARS_TO_KEEP = 1000
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _truncate_plain_text(text: str, overshoot_factor: float) -> str:
|
|
46
|
+
"""Truncate plain text so it helps a tool response fit the token budget.
|
|
47
|
+
|
|
48
|
+
Keeps the head and appends a marker. The amount kept scales with the
|
|
49
|
+
overshoot (mirroring the source-reduction math) and never drops below
|
|
50
|
+
``MIN_PLAIN_TEXT_CHARS_TO_KEEP``. Truncation is on characters rather than
|
|
51
|
+
tokens because the encoder is encode-only; on prose the character ratio is a
|
|
52
|
+
good proxy for the token ratio, and the outer loop re-counts and re-enters
|
|
53
|
+
until the payload fits or no further progress is possible. Any prior marker
|
|
54
|
+
is stripped first so repeated rounds neither stack markers nor re-flag an
|
|
55
|
+
already-floored string. Returns *text* unchanged when no truncation applies.
|
|
56
|
+
"""
|
|
57
|
+
base = text.removesuffix(PLAIN_TEXT_TRUNCATION_MARKER)
|
|
58
|
+
|
|
59
|
+
# Copied as for the case where the tool returns chunks (below)
|
|
60
|
+
aggressive_divisor = overshoot_factor * SAFETY_MARGIN_FOR_AGGRESSIVE_REDUCTION
|
|
61
|
+
divisor = max(
|
|
62
|
+
aggressive_divisor if aggressive_divisor >= 1.2 else overshoot_factor, 1.0
|
|
63
|
+
)
|
|
64
|
+
chars_to_keep = max(MIN_PLAIN_TEXT_CHARS_TO_KEEP, int(len(base) // divisor))
|
|
65
|
+
|
|
66
|
+
if chars_to_keep >= len(base):
|
|
67
|
+
return text
|
|
68
|
+
|
|
69
|
+
return base[:chars_to_keep] + PLAIN_TEXT_TRUNCATION_MARKER
|
|
70
|
+
|
|
40
71
|
|
|
41
72
|
class SourceReductionResult(BaseModel):
|
|
42
73
|
message: LanguageModelToolMessage
|
|
@@ -118,7 +149,9 @@ class LoopTokenReducer:
|
|
|
118
149
|
token_count = self._count_message_tokens(messages)
|
|
119
150
|
self._log_token_usage(token_count)
|
|
120
151
|
|
|
121
|
-
while self._exceeds_token_limit(token_count)
|
|
152
|
+
while self._exceeds_token_limit(token_count) and self._can_reduce_history(
|
|
153
|
+
loop_history
|
|
154
|
+
):
|
|
122
155
|
token_count_before_reduction = token_count
|
|
123
156
|
loop_history[:] = self._handle_token_limit_exceeded(
|
|
124
157
|
loop_history, token_count
|
|
@@ -141,18 +174,30 @@ class LoopTokenReducer:
|
|
|
141
174
|
return messages
|
|
142
175
|
|
|
143
176
|
def _exceeds_token_limit(self, token_count: int) -> bool:
|
|
144
|
-
"""
|
|
145
|
-
|
|
177
|
+
"""Whether the payload is over the effective input-token limit.
|
|
178
|
+
|
|
179
|
+
This is purely a size check. Whether anything can actually be reduced to
|
|
180
|
+
get back under the limit is a separate concern (:meth:`_can_reduce_history`).
|
|
181
|
+
"""
|
|
182
|
+
# TODO: This is not fully correct at the moment as the token_count
|
|
183
|
+
# include system_prompt and user question already
|
|
184
|
+
return token_count > self._effective_token_limit
|
|
185
|
+
|
|
186
|
+
def _can_reduce_history(self, loop_history: list[LanguageModelMessage]) -> bool:
|
|
187
|
+
"""Whether there is any tool response left to reduce.
|
|
188
|
+
|
|
189
|
+
Two independent reduction levers exist:
|
|
190
|
+
* a tool call with more than one chunk can shed sources, and
|
|
191
|
+
* a chunk-less plain-text tool response can be truncated.
|
|
192
|
+
When neither applies the reduction loop cannot make progress and stops.
|
|
193
|
+
"""
|
|
146
194
|
has_multiple_chunks_for_a_tool_call = any(
|
|
147
195
|
len(chunks) > 1
|
|
148
196
|
for chunks in self._reference_manager.get_chunks_of_all_tools()
|
|
149
197
|
)
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
exceeds_limit = token_count > self._effective_token_limit
|
|
154
|
-
|
|
155
|
-
return has_multiple_chunks_for_a_tool_call and exceeds_limit
|
|
198
|
+
return has_multiple_chunks_for_a_tool_call or any(
|
|
199
|
+
self._can_truncate_message(message) for message in loop_history
|
|
200
|
+
)
|
|
156
201
|
|
|
157
202
|
def _count_message_tokens(self, messages: LanguageModelMessages) -> int:
|
|
158
203
|
"""Count tokens in messages using the configured encoding model."""
|
|
@@ -211,7 +256,7 @@ class LoopTokenReducer:
|
|
|
211
256
|
f"(overshoot factor: {overshoot_factor:.2f}x). Reducing number of sources per tool call.",
|
|
212
257
|
)
|
|
213
258
|
|
|
214
|
-
return self.
|
|
259
|
+
return self._reduce_message_length_by_reducing_tool_responses_content(
|
|
215
260
|
loop_history, overshoot_factor
|
|
216
261
|
)
|
|
217
262
|
|
|
@@ -451,7 +496,7 @@ class LoopTokenReducer:
|
|
|
451
496
|
|
|
452
497
|
return limited_history_messages[idx:]
|
|
453
498
|
|
|
454
|
-
def
|
|
499
|
+
def _reduce_message_length_by_reducing_tool_responses_content(
|
|
455
500
|
self,
|
|
456
501
|
history: list[LanguageModelMessage],
|
|
457
502
|
overshoot_factor: float,
|
|
@@ -473,21 +518,41 @@ class LoopTokenReducer:
|
|
|
473
518
|
source_offset = max(0, self._max_db_source_number + 1)
|
|
474
519
|
|
|
475
520
|
for message in history:
|
|
476
|
-
if self._should_reduce_message(message):
|
|
477
|
-
result =
|
|
521
|
+
if not self._should_reduce_message(message):
|
|
522
|
+
result = message
|
|
523
|
+
elif self._has_sources(message):
|
|
524
|
+
source_result = self._reduce_sources_in_tool_message(
|
|
478
525
|
message,
|
|
479
526
|
chunk_offset,
|
|
480
527
|
source_offset,
|
|
481
528
|
overshoot_factor,
|
|
482
529
|
)
|
|
483
|
-
content_chunks_reduced.extend(
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
530
|
+
content_chunks_reduced.extend(source_result.reduced_chunks)
|
|
531
|
+
chunk_offset = source_result.chunk_offset
|
|
532
|
+
source_offset = source_result.source_offset
|
|
533
|
+
result = source_result.message
|
|
534
|
+
elif self._can_truncate_message(message):
|
|
535
|
+
assert isinstance(message.content, str)
|
|
536
|
+
truncated = _truncate_plain_text(message.content, overshoot_factor)
|
|
537
|
+
if truncated != message.content:
|
|
538
|
+
self._logger.warning(
|
|
539
|
+
f"Truncated plain-text tool response '{message.name}' to "
|
|
540
|
+
f"{len(truncated)} chars "
|
|
541
|
+
f"(overshoot factor: {overshoot_factor:.2f}x)."
|
|
542
|
+
)
|
|
543
|
+
result = LanguageModelToolMessage(
|
|
544
|
+
content=truncated,
|
|
545
|
+
tool_call_id=message.tool_call_id,
|
|
546
|
+
name=message.name,
|
|
547
|
+
)
|
|
487
548
|
else:
|
|
488
|
-
|
|
549
|
+
result = message
|
|
550
|
+
|
|
551
|
+
history_reduced.append(result)
|
|
552
|
+
|
|
553
|
+
if len(content_chunks_reduced) > 0:
|
|
554
|
+
self._reference_manager.replace(chunks=content_chunks_reduced)
|
|
489
555
|
|
|
490
|
-
self._reference_manager.replace(chunks=content_chunks_reduced)
|
|
491
556
|
return history_reduced
|
|
492
557
|
|
|
493
558
|
def _should_reduce_message(
|
|
@@ -498,6 +563,19 @@ class LoopTokenReducer:
|
|
|
498
563
|
message, LanguageModelToolMessage
|
|
499
564
|
)
|
|
500
565
|
|
|
566
|
+
def _has_sources(self, message: LanguageModelToolMessage) -> bool:
|
|
567
|
+
return len(self._reference_manager.get_chunks_of_tool(message.tool_call_id)) > 0
|
|
568
|
+
|
|
569
|
+
def _can_truncate_message(self, message: LanguageModelMessage) -> bool:
|
|
570
|
+
if not self._should_reduce_message(message) or message.name == "TableSearch":
|
|
571
|
+
return False
|
|
572
|
+
if not isinstance(message.content, str):
|
|
573
|
+
return False
|
|
574
|
+
if self._has_sources(message):
|
|
575
|
+
return False
|
|
576
|
+
base = message.content.removesuffix(PLAIN_TEXT_TRUNCATION_MARKER)
|
|
577
|
+
return len(base) > MIN_PLAIN_TEXT_CHARS_TO_KEEP
|
|
578
|
+
|
|
501
579
|
def _reduce_sources_in_tool_message(
|
|
502
580
|
self,
|
|
503
581
|
message: LanguageModelToolMessage,
|
|
@@ -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
|