unique_toolkit 2026.38.0__tar.gz → 2026.38.0.dev0__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.38.0 → unique_toolkit-2026.38.0.dev0}/PKG-INFO +2 -2
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/pyproject.toml +2 -2
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/files.py +4 -36
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/config.py +5 -24
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/tool.py +1 -10
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +5 -7
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +21 -127
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -10
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic_table/schemas.py +0 -10
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/responses_api.py +7 -42
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/content_tree/functions.py +36 -194
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/base/service.py +4 -18
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_model_params.py +9 -15
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/feature_flags/_ttl_cache.py +4 -13
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/infos.py +4 -166
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/model_costs.py +5 -59
- unique_toolkit-2026.38.0/unique_toolkit/monitoring/memory.py +0 -195
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/README.md +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/metadata_filter_scope.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_external_context.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/history_manager/settings.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/message_log_order.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/reference_manager/tests/test_external_context.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/names.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_container.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_files.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_memory.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/builder.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/office_preview.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/run_context.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic_table/synthetic_chat_event.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/feature_flags.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/find_env_file.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/deprecated/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/README.md +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/_internal/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/_base.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/identity/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/feature_flags/README.md +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/feature_flags/_graphql_client.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/feature_flags/client.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/feature_flags/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/feature_flags/settings.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/group/functions.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/group/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/user/functions.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/resources/user/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/experimental/testing/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/invocation_stats.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/settings.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/monitoring/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/monitoring/gunicorn.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/monitoring/middleware.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/monitoring/registry.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/monitoring/tracing.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/services/chat_service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/services/factory.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/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.38.0
|
|
3
|
+
Version: 2026.38.0.dev0
|
|
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.38.0
|
|
19
|
+
Requires-Dist: unique-sdk>=2026.38.0.dev0,<2026.38.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.38.0"
|
|
3
|
+
version = "2026.38.0.dev0"
|
|
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.38.0",
|
|
31
|
+
"unique-sdk>=2026.38.0.dev0,<2026.38.0rc0",
|
|
32
32
|
"jambo>=0.1.2,<0.2",
|
|
33
33
|
"jinja2>=3.1.6,<4",
|
|
34
34
|
"docxtpl>=0.20.1,<0.21",
|
{unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/_common/utils/files.py
RENAMED
|
@@ -4,21 +4,6 @@ import mimetypes
|
|
|
4
4
|
from enum import StrEnum
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
|
|
7
|
-
# Takes precedence over `mimetypes` (which lacks `.msg` and varies by host)
|
|
8
|
-
# so classification matches the platform's supported-mime-types catalog.
|
|
9
|
-
_EXTENSION_MIME_OVERRIDES: dict[str, str] = {
|
|
10
|
-
".msg": "application/vnd.ms-outlook",
|
|
11
|
-
".eml": "message/rfc822",
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
def guess_mime_type(filename: str | Path) -> str | None:
|
|
16
|
-
suffix = Path(filename).suffix.lower()
|
|
17
|
-
if override := _EXTENSION_MIME_OVERRIDES.get(suffix):
|
|
18
|
-
return override
|
|
19
|
-
mime_type, _ = mimetypes.guess_type(str(filename))
|
|
20
|
-
return mime_type
|
|
21
|
-
|
|
22
7
|
|
|
23
8
|
class FileMimeType(StrEnum):
|
|
24
9
|
PDF = "application/pdf"
|
|
@@ -38,12 +23,10 @@ class FileMimeType(StrEnum):
|
|
|
38
23
|
MD = "text/markdown"
|
|
39
24
|
TXT = "text/plain"
|
|
40
25
|
JSON = "application/json"
|
|
41
|
-
MSG = "application/vnd.ms-outlook"
|
|
42
|
-
EML = "message/rfc822"
|
|
43
26
|
|
|
44
27
|
@classmethod
|
|
45
28
|
def get_mime_from_file_path(cls, filepath: Path) -> "FileMimeType | None":
|
|
46
|
-
mime_type =
|
|
29
|
+
mime_type, _ = mimetypes.guess_type(filepath)
|
|
47
30
|
if mime_type is None:
|
|
48
31
|
return None
|
|
49
32
|
|
|
@@ -83,11 +66,6 @@ class FileMimeType(StrEnum):
|
|
|
83
66
|
def is_csv(self) -> bool:
|
|
84
67
|
return self == self.__class__.CSV
|
|
85
68
|
|
|
86
|
-
@property
|
|
87
|
-
def is_email(self) -> bool:
|
|
88
|
-
cls = self.__class__
|
|
89
|
-
return self in {cls.MSG, cls.EML}
|
|
90
|
-
|
|
91
69
|
@classmethod
|
|
92
70
|
def is_docx_mime(cls, filepath: Path) -> bool:
|
|
93
71
|
mime_type = cls.get_mime_from_file_path(filepath)
|
|
@@ -144,22 +122,12 @@ def get_common_name(extension: FileMimeType) -> str:
|
|
|
144
122
|
return "markdown"
|
|
145
123
|
case FileMimeType.HTML:
|
|
146
124
|
return "html"
|
|
147
|
-
case FileMimeType.MSG | FileMimeType.EML:
|
|
148
|
-
return "email"
|
|
149
125
|
case _: # pyright: ignore[reportUnnecessaryComparison]
|
|
150
126
|
return "unknown" # pyright: ignore[reportUnreachable]
|
|
151
127
|
|
|
152
128
|
|
|
153
|
-
_MIME_EXTENSION_OVERRIDES: dict[str, str] = {
|
|
154
|
-
mime: ext for ext, mime in _EXTENSION_MIME_OVERRIDES.items()
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
|
|
158
129
|
def get_file_extensions(mimes: list[FileMimeType]) -> list[str]:
|
|
159
|
-
types = [
|
|
160
|
-
_MIME_EXTENSION_OVERRIDES.get(mime) or mimetypes.guess_extension(mime)
|
|
161
|
-
for mime in mimes
|
|
162
|
-
]
|
|
130
|
+
types = [mimetypes.guess_extension(mime) for mime in mimes]
|
|
163
131
|
return [t for t in types if t]
|
|
164
132
|
|
|
165
133
|
|
|
@@ -174,7 +142,7 @@ class ImageMimeType(StrEnum):
|
|
|
174
142
|
|
|
175
143
|
|
|
176
144
|
def is_file_content(filename: str) -> bool:
|
|
177
|
-
mimetype =
|
|
145
|
+
mimetype, _ = mimetypes.guess_type(filename)
|
|
178
146
|
|
|
179
147
|
if not mimetype:
|
|
180
148
|
return False
|
|
@@ -183,7 +151,7 @@ def is_file_content(filename: str) -> bool:
|
|
|
183
151
|
|
|
184
152
|
|
|
185
153
|
def is_image_content(filename: str) -> bool:
|
|
186
|
-
mimetype =
|
|
154
|
+
mimetype, _ = mimetypes.guess_type(filename)
|
|
187
155
|
|
|
188
156
|
if not mimetype:
|
|
189
157
|
return False
|
|
@@ -11,32 +11,26 @@ from unique_toolkit.elicitation import (
|
|
|
11
11
|
)
|
|
12
12
|
|
|
13
13
|
_DEFAULT_TOOL_DESCRIPTION = """
|
|
14
|
-
Ask the user a question through a structured form and block until they answer. Use whenever you need information, a decision, or confirmation before continuing correctly: clarifying questions, confirmation before destructive or irreversible work, missing parameters, or choosing among plausible options. Do not ask the user in normal chat text while this tool is available—call AskUser, wait for the result, then continue. If unsure which interpretation, scope, or value applies, call AskUser instead of guessing.
|
|
14
|
+
Ask the user a question through a structured form and block until they answer. Use whenever you need information, a decision, or confirmation before continuing correctly: clarifying questions, confirmation before destructive or irreversible work, missing parameters, or choosing among plausible options. Do not ask the user in normal chat text while this tool is available—call AskUser, wait for the result, then continue. If unsure which interpretation, scope, or value applies, call AskUser instead of guessing. Destructive actions must include an explicit confirmation field. Form and chat anchoring are handled for you; the call blocks until the user responds, declines, cancels, or times out.
|
|
15
15
|
""".strip()
|
|
16
16
|
|
|
17
17
|
_DEFAULT_TOOL_DESCRIPTION_FOR_SYSTEM_PROMPT = """
|
|
18
18
|
- If your next message would ask the user for information, a decision, or confirmation, call AskUser instead of writing the question in chat.
|
|
19
19
|
- If more than one reasonable reading of the request exists, call AskUser before acting—do not silently pick a default.
|
|
20
|
-
- Destructive or irreversible actions
|
|
20
|
+
- Destructive or irreversible actions require an explicit confirmation field (e.g. boolean `confirm`) in `response_schema`.
|
|
21
21
|
""".strip()
|
|
22
22
|
|
|
23
23
|
_DEFAULT_MESSAGE_DESCRIPTION = "The question or prompt shown to the user"
|
|
24
24
|
|
|
25
25
|
_DEFAULT_RESPONSE_SCHEMA_DESCRIPTION = """
|
|
26
|
-
JSON Schema object (root type "object") for the form shown to the user; you construct it.
|
|
26
|
+
JSON Schema object (root type "object") for the form shown to the user; you construct it. Single string property for free-text; boolean for a confirmation; string + enum for one choice (dropdown); array with items.enum for choose-many. Mark needed fields required and add short property descriptions (shown as help text). Prefer one small form over many calls.
|
|
27
27
|
Examples:
|
|
28
|
-
- confirm: {"type":"object","properties":{}};
|
|
29
28
|
- free-text: {"type":"object","properties":{"answer":{"type":"string"}},"required":["answer"]};
|
|
29
|
+
- confirm: {"type":"object","properties":{"confirm":{"type":"boolean"}},"required":["confirm"]};
|
|
30
30
|
- choice: {"type":"object","properties":{"region":{"type":"string","enum":["EU","US"]}},"required":["region"]};
|
|
31
|
-
- multi: {"type":"object","properties":{"topics":{"type":"array","items":{"type":"string","enum":["a","b"]}}}}
|
|
32
|
-
- yes/no data: {"type":"object","properties":{"include_appendix":{"type":"boolean","title":"Include appendix"}}}.
|
|
31
|
+
- multi: {"type":"object","properties":{"topics":{"type":"array","items":{"type":"string","enum":["a","b"]}}}}.
|
|
33
32
|
""".strip()
|
|
34
33
|
|
|
35
|
-
_DEFAULT_ACCEPTED_MESSAGE = (
|
|
36
|
-
"The user confirmed the request. The form had no fields, so there is no "
|
|
37
|
-
"response content. Proceed with the confirmed action."
|
|
38
|
-
)
|
|
39
|
-
|
|
40
34
|
_TIMEOUT_SECONDS_MIN = 1
|
|
41
35
|
_TIMOUT_SECONDS_MAX = 3600
|
|
42
36
|
|
|
@@ -87,19 +81,6 @@ class AskUserToolConfig(BaseToolConfig):
|
|
|
87
81
|
title="`response_schema` tool input field description",
|
|
88
82
|
)
|
|
89
83
|
|
|
90
|
-
accepted_message: Annotated[
|
|
91
|
-
str,
|
|
92
|
-
RJSFMetaTag.StringWidget.textarea(rows=2),
|
|
93
|
-
] = Field(
|
|
94
|
-
default=_DEFAULT_ACCEPTED_MESSAGE,
|
|
95
|
-
description=(
|
|
96
|
-
"Message returned to the model when the user accepts a form without "
|
|
97
|
-
"fields (empty-properties confirmation schema). Forms with fields "
|
|
98
|
-
"return the submitted values as JSON instead."
|
|
99
|
-
),
|
|
100
|
-
title="Accepted response (empty form)",
|
|
101
|
-
)
|
|
102
|
-
|
|
103
84
|
declined_message: Annotated[
|
|
104
85
|
str,
|
|
105
86
|
RJSFMetaTag.StringWidget.textarea(
|
|
@@ -158,17 +158,8 @@ class AskUserTool(Tool[AskUserToolConfig]):
|
|
|
158
158
|
|
|
159
159
|
_LOGGER.info("User responded to elicitation request")
|
|
160
160
|
|
|
161
|
-
# Decide on the schema, not the payload: a form with optional fields left
|
|
162
|
-
# blank also comes back empty, and that is an answer ("{}"), not consent.
|
|
163
|
-
if not params.response_schema.get("properties"):
|
|
164
|
-
return ToolCallResponse(
|
|
165
|
-
id=tool_call.id,
|
|
166
|
-
name=self.name,
|
|
167
|
-
content=self.config.accepted_message,
|
|
168
|
-
)
|
|
169
|
-
|
|
170
161
|
return ToolCallResponse(
|
|
171
162
|
id=tool_call.id,
|
|
172
163
|
name=self.name,
|
|
173
|
-
content=json.dumps(elicitation.response_content
|
|
164
|
+
content=json.dumps(elicitation.response_content, ensure_ascii=False),
|
|
174
165
|
)
|
|
@@ -6,6 +6,7 @@ from pathlib import Path
|
|
|
6
6
|
from typing import Any
|
|
7
7
|
|
|
8
8
|
import unique_sdk.utils.file_io as file_io
|
|
9
|
+
from openai.types.responses.response_output_text import AnnotationContainerFileCitation
|
|
9
10
|
from pydantic import BaseModel
|
|
10
11
|
|
|
11
12
|
from unique_toolkit import ChatService
|
|
@@ -15,9 +16,6 @@ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors
|
|
|
15
16
|
convert_office_bytes_to_preview_pdf,
|
|
16
17
|
office_extension,
|
|
17
18
|
)
|
|
18
|
-
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.schemas import (
|
|
19
|
-
CodeInterpreterContainerFile,
|
|
20
|
-
)
|
|
21
19
|
from unique_toolkit.content.schemas import Content
|
|
22
20
|
|
|
23
21
|
_CODE_EXECUTION_ARTIFACT_METADATA_KEY: str = "codeExecutionArtifactMetadata"
|
|
@@ -63,7 +61,7 @@ def _kb_safe_mime(mime: str) -> str:
|
|
|
63
61
|
|
|
64
62
|
|
|
65
63
|
def _artifact_metadata(
|
|
66
|
-
file:
|
|
64
|
+
file: AnnotationContainerFileCitation,
|
|
67
65
|
) -> dict[str, Any]:
|
|
68
66
|
return {
|
|
69
67
|
_CODE_EXECUTION_ARTIFACT_METADATA_KEY: CodeExecutionArtifactMetadata(
|
|
@@ -76,7 +74,7 @@ def _artifact_metadata(
|
|
|
76
74
|
|
|
77
75
|
async def _upload_artifact_bytes(
|
|
78
76
|
chat_service: ChatService,
|
|
79
|
-
file:
|
|
77
|
+
file: AnnotationContainerFileCitation,
|
|
80
78
|
file_bytes: bytes,
|
|
81
79
|
mime: str,
|
|
82
80
|
) -> Content:
|
|
@@ -99,7 +97,7 @@ async def _upload_artifact_bytes(
|
|
|
99
97
|
|
|
100
98
|
async def _upload_office_artifact_with_preview(
|
|
101
99
|
chat_service: ChatService,
|
|
102
|
-
file:
|
|
100
|
+
file: AnnotationContainerFileCitation,
|
|
103
101
|
file_bytes: bytes,
|
|
104
102
|
mime: str,
|
|
105
103
|
) -> Content | None:
|
|
@@ -148,7 +146,7 @@ async def _upload_office_artifact_with_preview(
|
|
|
148
146
|
|
|
149
147
|
async def save_code_execution_artifact(
|
|
150
148
|
chat_service: ChatService,
|
|
151
|
-
file:
|
|
149
|
+
file: AnnotationContainerFileCitation,
|
|
152
150
|
file_bytes: bytes,
|
|
153
151
|
*,
|
|
154
152
|
attach_office_preview: bool = False,
|
|
@@ -6,10 +6,10 @@ import time
|
|
|
6
6
|
from dataclasses import dataclass
|
|
7
7
|
from mimetypes import guess_type
|
|
8
8
|
from typing import NamedTuple, TypedDict, override
|
|
9
|
-
from urllib.parse import quote, unquote
|
|
10
9
|
|
|
11
10
|
import httpx
|
|
12
11
|
from openai import AsyncOpenAI
|
|
12
|
+
from openai.types.responses.response_output_text import AnnotationContainerFileCitation
|
|
13
13
|
from pydantic import BaseModel, Field, RootModel
|
|
14
14
|
from pydantic.json_schema import SkipJsonSchema
|
|
15
15
|
from tenacity import (
|
|
@@ -34,7 +34,6 @@ from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors
|
|
|
34
34
|
)
|
|
35
35
|
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.schemas import (
|
|
36
36
|
CodeInterpreterBlock,
|
|
37
|
-
CodeInterpreterContainerFile,
|
|
38
37
|
CodeInterpreterFile,
|
|
39
38
|
CodeInterpreterFileType,
|
|
40
39
|
)
|
|
@@ -312,7 +311,7 @@ class _FileProgressTracker:
|
|
|
312
311
|
if state.phase == "pending":
|
|
313
312
|
continue
|
|
314
313
|
progress = self._format_inline(filename, state)
|
|
315
|
-
pattern =
|
|
314
|
+
pattern = rf"!?\[.*?\]\(sandbox:/mnt/data/{re.escape(filename)}\)"
|
|
316
315
|
text = re.sub(pattern, progress, text)
|
|
317
316
|
|
|
318
317
|
active = {
|
|
@@ -402,7 +401,6 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
402
401
|
|
|
403
402
|
# Cleared at the start of each run(); holds this-turn download sizes.
|
|
404
403
|
self._file_size_map: dict[str, int] = {}
|
|
405
|
-
self._container_files: list[CodeInterpreterContainerFile] = []
|
|
406
404
|
|
|
407
405
|
# Resolved in run() (before apply_postprocessing_to_response) since flag evaluation is async.
|
|
408
406
|
self._fence_ff_on = False
|
|
@@ -421,89 +419,6 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
421
419
|
reraise=True,
|
|
422
420
|
)
|
|
423
421
|
|
|
424
|
-
async def _resolve_container_files(
|
|
425
|
-
self, loop_response: ResponsesLanguageModelStreamResponse
|
|
426
|
-
) -> list[CodeInterpreterContainerFile]:
|
|
427
|
-
"""
|
|
428
|
-
Matches files cited by the agent to their id.
|
|
429
|
-
First tries to match files using the `citations` in the llm response.
|
|
430
|
-
If that fails, uses `container.files.list` in order to find the correct file
|
|
431
|
-
"""
|
|
432
|
-
container_files = [
|
|
433
|
-
CodeInterpreterContainerFile(
|
|
434
|
-
container_id=annotation.container_id,
|
|
435
|
-
file_id=annotation.file_id,
|
|
436
|
-
filename=annotation.filename,
|
|
437
|
-
)
|
|
438
|
-
for annotation in loop_response.container_files
|
|
439
|
-
]
|
|
440
|
-
|
|
441
|
-
text = loop_response.message.text or ""
|
|
442
|
-
cited_files = set(_extract_container_file_citations_from_text(text))
|
|
443
|
-
|
|
444
|
-
unresolved_files = cited_files - {file.filename for file in container_files}
|
|
445
|
-
|
|
446
|
-
if len(unresolved_files) == 0:
|
|
447
|
-
return container_files
|
|
448
|
-
|
|
449
|
-
code_interpreter_calls = loop_response.code_interpreter_calls
|
|
450
|
-
|
|
451
|
-
if len(code_interpreter_calls) == 0:
|
|
452
|
-
return container_files
|
|
453
|
-
|
|
454
|
-
container_id = code_interpreter_calls[0].container_id
|
|
455
|
-
|
|
456
|
-
self._log.info(
|
|
457
|
-
"Recovering %d unresolved sandbox link(s) from container %s: %s",
|
|
458
|
-
len(unresolved_files),
|
|
459
|
-
container_id,
|
|
460
|
-
list(unresolved_files),
|
|
461
|
-
)
|
|
462
|
-
|
|
463
|
-
try:
|
|
464
|
-
async for container_file in self._client.containers.files.list(
|
|
465
|
-
container_id=container_id,
|
|
466
|
-
order="desc",
|
|
467
|
-
):
|
|
468
|
-
if container_file.source != "assistant":
|
|
469
|
-
continue
|
|
470
|
-
|
|
471
|
-
path = container_file.path
|
|
472
|
-
filename = (
|
|
473
|
-
path.removeprefix("/mnt/data/")
|
|
474
|
-
if path.startswith("/mnt/data/")
|
|
475
|
-
else path
|
|
476
|
-
)
|
|
477
|
-
|
|
478
|
-
if filename in unresolved_files:
|
|
479
|
-
unresolved_files.remove(filename)
|
|
480
|
-
container_files.append(
|
|
481
|
-
CodeInterpreterContainerFile(
|
|
482
|
-
container_id=container_file.container_id,
|
|
483
|
-
file_id=container_file.id,
|
|
484
|
-
filename=filename,
|
|
485
|
-
)
|
|
486
|
-
)
|
|
487
|
-
|
|
488
|
-
if len(unresolved_files) == 0:
|
|
489
|
-
break
|
|
490
|
-
|
|
491
|
-
except Exception:
|
|
492
|
-
self._log.exception(
|
|
493
|
-
"Failed to list files for container %s while recovering "
|
|
494
|
-
"missing citations; dangling-link handling will continue.",
|
|
495
|
-
container_id,
|
|
496
|
-
)
|
|
497
|
-
|
|
498
|
-
if len(unresolved_files) > 0:
|
|
499
|
-
self._log.info(
|
|
500
|
-
"%d sandbox link(s) left unresolved after recovery: %s",
|
|
501
|
-
len(unresolved_files),
|
|
502
|
-
list(unresolved_files),
|
|
503
|
-
)
|
|
504
|
-
|
|
505
|
-
return container_files
|
|
506
|
-
|
|
507
422
|
@override
|
|
508
423
|
async def run(
|
|
509
424
|
self, loop_response: ResponsesLanguageModelStreamResponse
|
|
@@ -522,10 +437,9 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
522
437
|
company_id=self._company_id or COMPANY_ID_PLACEHOLDER,
|
|
523
438
|
)
|
|
524
439
|
|
|
525
|
-
container_files =
|
|
526
|
-
self._container_files = container_files
|
|
440
|
+
container_files = loop_response.container_files
|
|
527
441
|
self._log.info(
|
|
528
|
-
"run()
|
|
442
|
+
"run() found %d container file annotation(s): %s",
|
|
529
443
|
len(container_files),
|
|
530
444
|
[cf.filename for cf in container_files],
|
|
531
445
|
)
|
|
@@ -621,12 +535,10 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
621
535
|
save_ms,
|
|
622
536
|
)
|
|
623
537
|
|
|
624
|
-
return self._compute_artifacts_debug_info(loop_response
|
|
538
|
+
return self._compute_artifacts_debug_info(loop_response)
|
|
625
539
|
|
|
626
540
|
def _compute_artifacts_debug_info(
|
|
627
|
-
self,
|
|
628
|
-
loop_response: ResponsesLanguageModelStreamResponse,
|
|
629
|
-
container_files: list[CodeInterpreterContainerFile],
|
|
541
|
+
self, loop_response: ResponsesLanguageModelStreamResponse
|
|
630
542
|
) -> ArtifactsDebugInfo | None:
|
|
631
543
|
"""Compute this turn's successfully-created artifacts.
|
|
632
544
|
|
|
@@ -650,7 +562,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
650
562
|
|
|
651
563
|
created_filenames = {
|
|
652
564
|
cf.filename
|
|
653
|
-
for cf in container_files
|
|
565
|
+
for cf in loop_response.container_files
|
|
654
566
|
if self._content_map.get(cf.filename) is not None
|
|
655
567
|
}
|
|
656
568
|
total_bytes = sum(
|
|
@@ -767,10 +679,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
767
679
|
|
|
768
680
|
if self._fence_ff_on:
|
|
769
681
|
code_blocks = _build_code_blocks(
|
|
770
|
-
loop_response,
|
|
771
|
-
self._content_map,
|
|
772
|
-
self._container_files,
|
|
773
|
-
include_html=self._html_fence_ff_on,
|
|
682
|
+
loop_response, self._content_map, include_html=self._html_fence_ff_on
|
|
774
683
|
)
|
|
775
684
|
self._log.info(
|
|
776
685
|
"Fence injection — %d code block(s), files: %s",
|
|
@@ -824,7 +733,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
824
733
|
@failsafe_async(failure_return_value=None, logger=logger)
|
|
825
734
|
async def _download_and_upload_container_files_to_knowledge_base(
|
|
826
735
|
self,
|
|
827
|
-
container_file:
|
|
736
|
+
container_file: AnnotationContainerFileCitation,
|
|
828
737
|
semaphore: asyncio.Semaphore,
|
|
829
738
|
tracker: _FileProgressTracker | None = None,
|
|
830
739
|
) -> _ContentInfo | None:
|
|
@@ -895,7 +804,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
895
804
|
|
|
896
805
|
async def _download_file_bytes_with_progress(
|
|
897
806
|
self,
|
|
898
|
-
container_file:
|
|
807
|
+
container_file: AnnotationContainerFileCitation,
|
|
899
808
|
tracker: _FileProgressTracker | None,
|
|
900
809
|
) -> bytes:
|
|
901
810
|
"""Download container file with streaming progress and manual retry loop.
|
|
@@ -978,7 +887,7 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
978
887
|
|
|
979
888
|
async def _stream_download_bytes(
|
|
980
889
|
self,
|
|
981
|
-
container_file:
|
|
890
|
+
container_file: AnnotationContainerFileCitation,
|
|
982
891
|
tracker: _FileProgressTracker | None,
|
|
983
892
|
retry_attempt: int,
|
|
984
893
|
download_start: float,
|
|
@@ -1286,7 +1195,6 @@ def _inject_code_execution_fences(
|
|
|
1286
1195
|
def _build_code_blocks(
|
|
1287
1196
|
loop_response: ResponsesLanguageModelStreamResponse,
|
|
1288
1197
|
content_map: dict[str, str | None],
|
|
1289
|
-
container_files: list[CodeInterpreterContainerFile],
|
|
1290
1198
|
include_html: bool = False,
|
|
1291
1199
|
) -> list[CodeInterpreterBlock]:
|
|
1292
1200
|
"""Map each code interpreter call to the files it produced via /mnt/data/ path matching.
|
|
@@ -1317,7 +1225,7 @@ def _build_code_blocks(
|
|
|
1317
1225
|
for idx, call in enumerate(calls):
|
|
1318
1226
|
if not call.code:
|
|
1319
1227
|
continue
|
|
1320
|
-
for annotation in container_files:
|
|
1228
|
+
for annotation in loop_response.container_files:
|
|
1321
1229
|
if (
|
|
1322
1230
|
content_map.get(annotation.filename) is not None
|
|
1323
1231
|
and f"/mnt/data/{annotation.filename}" in call.code
|
|
@@ -1346,7 +1254,7 @@ def _build_code_blocks(
|
|
|
1346
1254
|
for idx, call in enumerate(calls):
|
|
1347
1255
|
if not call.code:
|
|
1348
1256
|
continue
|
|
1349
|
-
for annotation in container_files:
|
|
1257
|
+
for annotation in loop_response.container_files:
|
|
1350
1258
|
if annotation.filename in primary_matched_filenames:
|
|
1351
1259
|
continue
|
|
1352
1260
|
if content_map.get(annotation.filename) is None:
|
|
@@ -1373,7 +1281,7 @@ def _build_code_blocks(
|
|
|
1373
1281
|
if call.code:
|
|
1374
1282
|
last_block_idx = idx
|
|
1375
1283
|
if last_block_idx is not None:
|
|
1376
|
-
for annotation in container_files:
|
|
1284
|
+
for annotation in loop_response.container_files:
|
|
1377
1285
|
if annotation.filename in file_to_block_idx:
|
|
1378
1286
|
continue
|
|
1379
1287
|
if content_map.get(annotation.filename) is None:
|
|
@@ -1386,7 +1294,7 @@ def _build_code_blocks(
|
|
|
1386
1294
|
# file appears exactly once per block (last annotation wins, consistent with
|
|
1387
1295
|
# the last-writer-wins rule applied in step 1).
|
|
1388
1296
|
block_file_map: dict[int, dict[str, CodeInterpreterFile]] = {}
|
|
1389
|
-
for annotation in container_files:
|
|
1297
|
+
for annotation in loop_response.container_files:
|
|
1390
1298
|
if not include_html and _get_file_type(annotation.filename) == "html":
|
|
1391
1299
|
continue
|
|
1392
1300
|
content_id = content_map.get(annotation.filename)
|
|
@@ -1437,24 +1345,10 @@ def _warn_missing_content_ids(text: str, content_map: dict[str, str | None]) ->
|
|
|
1437
1345
|
# so the entire `[label](sandbox://...)` token can be replaced rather than just the URL.
|
|
1438
1346
|
_SANDBOX_MARKDOWN_LINK_RE = re.compile(r"!?\[.*?\]\(sandbox:/mnt/data/\S+?\)")
|
|
1439
1347
|
|
|
1440
|
-
|
|
1441
|
-
def _sandbox_link_pattern(filename: str) -> str:
|
|
1442
|
-
"""Return a pattern matching the markdown sandbox link for `filename`."""
|
|
1443
|
-
spellings = "|".join(
|
|
1444
|
-
dict.fromkeys([re.escape(filename), re.escape(quote(filename))])
|
|
1445
|
-
)
|
|
1446
|
-
return rf"!?\[.*?\]\(sandbox:/mnt/data/(?:{spellings})\)"
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
1348
|
# Extracts the bare filename from a sandbox URL like `sandbox:/mnt/data/foo.csv`.
|
|
1450
1349
|
_SANDBOX_FILENAME_RE = re.compile(r"sandbox:/mnt/data/([^)\s]+)")
|
|
1451
1350
|
|
|
1452
1351
|
|
|
1453
|
-
def _extract_container_file_citations_from_text(text: str) -> list[str]:
|
|
1454
|
-
"""Extract container filenames from sandbox citations in their text order."""
|
|
1455
|
-
return [unquote(filename) for filename in _SANDBOX_FILENAME_RE.findall(text)]
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
1352
|
def _replace_dangling_sandbox_links(
|
|
1459
1353
|
text: str, *, ci_ran: bool = True
|
|
1460
1354
|
) -> tuple[str, bool]:
|
|
@@ -1477,8 +1371,8 @@ def _replace_dangling_sandbox_links(
|
|
|
1477
1371
|
return text, False
|
|
1478
1372
|
|
|
1479
1373
|
def _replacement(m: re.Match[str]) -> str:
|
|
1480
|
-
|
|
1481
|
-
filename =
|
|
1374
|
+
filename_match = _SANDBOX_FILENAME_RE.search(m.group())
|
|
1375
|
+
filename = filename_match.group(1) if filename_match else "the file"
|
|
1482
1376
|
logger.warning(
|
|
1483
1377
|
"Dangling sandbox link found in final text: '%s'. ci_ran=%s. "
|
|
1484
1378
|
"The file was either never generated or the link format did not match "
|
|
@@ -1539,7 +1433,7 @@ def _get_next_ref_number(references: list[ContentReference] | None) -> int:
|
|
|
1539
1433
|
def _replace_container_file_error(
|
|
1540
1434
|
text: str, filename: str, error_message: str
|
|
1541
1435
|
) -> tuple[str, bool]:
|
|
1542
|
-
image_markdown =
|
|
1436
|
+
image_markdown = rf"!?\[.*?\]\(sandbox:/mnt/data/{re.escape(filename)}\)"
|
|
1543
1437
|
|
|
1544
1438
|
if not re.search(image_markdown, text):
|
|
1545
1439
|
logger.warning(
|
|
@@ -1560,7 +1454,7 @@ def _replace_container_file_error(
|
|
|
1560
1454
|
def _replace_container_image_citation(
|
|
1561
1455
|
text: str, filename: str, content_id: str
|
|
1562
1456
|
) -> tuple[str, bool]:
|
|
1563
|
-
image_markdown =
|
|
1457
|
+
image_markdown = rf"!?\[.*?\]\(sandbox:/mnt/data/{re.escape(filename)}\)"
|
|
1564
1458
|
|
|
1565
1459
|
if not re.search(image_markdown, text):
|
|
1566
1460
|
logger.warning(
|
|
@@ -1582,7 +1476,7 @@ def _replace_container_image_citation(
|
|
|
1582
1476
|
def _replace_container_html_citation(
|
|
1583
1477
|
text: str, filename: str, content_id: str
|
|
1584
1478
|
) -> tuple[str, bool]:
|
|
1585
|
-
link_core =
|
|
1479
|
+
link_core = rf"!?\[.*?\]\(sandbox:/mnt/data/{re.escape(filename)}\)"
|
|
1586
1480
|
html_markdown = link_core
|
|
1587
1481
|
|
|
1588
1482
|
if not re.search(html_markdown, text):
|
|
@@ -1640,7 +1534,7 @@ def _replace_container_file_citation(
|
|
|
1640
1534
|
original pre-fence behaviour is restored: the link is replaced with <sup>N</sup>
|
|
1641
1535
|
and the file remains accessible via the references panel.
|
|
1642
1536
|
"""
|
|
1643
|
-
file_markdown =
|
|
1537
|
+
file_markdown = rf"!?\[.*?\]\(sandbox:/mnt/data/{re.escape(filename)}\)"
|
|
1644
1538
|
|
|
1645
1539
|
if not re.search(file_markdown, text):
|
|
1646
1540
|
logger.warning(
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"""Code interpreter types used by the generated-files postprocessor."""
|
|
2
2
|
|
|
3
|
-
from dataclasses import dataclass
|
|
4
3
|
from typing import Literal
|
|
5
4
|
|
|
6
5
|
from pydantic import BaseModel
|
|
@@ -8,15 +7,6 @@ from pydantic import BaseModel
|
|
|
8
7
|
CodeInterpreterFileType = Literal["image", "document", "html"]
|
|
9
8
|
|
|
10
9
|
|
|
11
|
-
@dataclass(frozen=True)
|
|
12
|
-
class CodeInterpreterContainerFile:
|
|
13
|
-
"""Provider-independent identity of a file in a code interpreter container."""
|
|
14
|
-
|
|
15
|
-
container_id: str
|
|
16
|
-
file_id: str
|
|
17
|
-
filename: str
|
|
18
|
-
|
|
19
|
-
|
|
20
10
|
class CodeInterpreterFile(BaseModel):
|
|
21
11
|
"""A single file produced by a code interpreter execution."""
|
|
22
12
|
|
{unique_toolkit-2026.38.0 → unique_toolkit-2026.38.0.dev0}/unique_toolkit/agentic_table/schemas.py
RENAMED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
from datetime import datetime
|
|
2
1
|
from enum import StrEnum
|
|
3
2
|
from typing import Annotated, Any, Generic, Literal, TypeVar, override
|
|
4
3
|
|
|
@@ -502,15 +501,6 @@ class MagicTableSheet(BaseModel):
|
|
|
502
501
|
created_by: str
|
|
503
502
|
company_id: str
|
|
504
503
|
created_at: str
|
|
505
|
-
user_aborted_at: datetime | None = Field(
|
|
506
|
-
default=None,
|
|
507
|
-
description=(
|
|
508
|
-
"When the user stopped an in-progress refresh. Set by "
|
|
509
|
-
"stopMagicTableRefresh and returned on GET sheet/library so the "
|
|
510
|
-
"agent can poll and exit. None when the run was not aborted or "
|
|
511
|
-
"when an older backend omits the field."
|
|
512
|
-
),
|
|
513
|
-
)
|
|
514
504
|
magic_table_cells: list[MagicTableCell] = Field(
|
|
515
505
|
default_factory=list, description="The cells in the sheet"
|
|
516
506
|
)
|