unique_toolkit 2026.22.0.dev13__tar.gz → 2026.24.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/PKG-INFO +3 -2
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/pyproject.toml +7 -5
- unique_toolkit-2026.24.0/unique_toolkit/__init__.py +149 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/metadata_filter_scope.py +7 -4
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/pydantic/rjsf_tags.py +6 -1
- unique_toolkit-2026.24.0/unique_toolkit/agentic/tools/a2a/config.py +41 -0
- unique_toolkit-2026.24.0/unique_toolkit/agentic/tools/a2a/tool/__init__.py +7 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/tool/config.py +51 -2
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/tool/service.py +86 -2
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +2 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +22 -5
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/tool_manager.py +48 -3
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/app/schemas.py +28 -2
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/content/__init__.py +30 -1
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/content/schemas.py +2 -1
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/content/smart_rules.py +61 -3
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/README.md +11 -9
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +27 -4
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +5 -1
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/__init__.py +3 -1
- unique_toolkit-2026.24.0/unique_toolkit/experimental/resources/feature_flags/README.md +183 -0
- unique_toolkit-2026.24.0/unique_toolkit/experimental/resources/feature_flags/__init__.py +50 -0
- unique_toolkit-2026.24.0/unique_toolkit/experimental/resources/feature_flags/_graphql_client.py +57 -0
- unique_toolkit-2026.24.0/unique_toolkit/experimental/resources/feature_flags/_ttl_cache.py +65 -0
- unique_toolkit-2026.24.0/unique_toolkit/experimental/resources/feature_flags/client.py +249 -0
- unique_toolkit-2026.24.0/unique_toolkit/experimental/resources/feature_flags/schemas.py +17 -0
- unique_toolkit-2026.24.0/unique_toolkit/experimental/resources/feature_flags/settings.py +33 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/language_model/__init__.py +15 -3
- unique_toolkit-2026.24.0/unique_toolkit/monitoring/gunicorn.py +24 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/monitoring/middleware.py +4 -3
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/monitoring/registry.py +58 -4
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/services/chat_service.py +26 -20
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/short_term_memory/functions.py +20 -8
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/short_term_memory/service.py +5 -5
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/smart_rules/compile.py +6 -0
- unique_toolkit-2026.22.0.dev13/unique_toolkit/__init__.py +0 -85
- unique_toolkit-2026.22.0.dev13/unique_toolkit/agentic/tools/a2a/config.py +0 -17
- unique_toolkit-2026.22.0.dev13/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -4
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/README.md +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/history_manager/settings.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/message_log_order.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/names.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/app/feature_flags.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/app/find_env_file.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/_internal/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/_base.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/content_tree/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/internal_search/base/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/identity/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/group/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/group/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/user/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/resources/user/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/experimental/testing/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/language_model/functions.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/language_model/settings.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/monitoring/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/services/factory.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-2026.22.0.dev13 → unique_toolkit-2026.24.0}/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.
|
|
3
|
+
Version: 2026.24.0
|
|
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.
|
|
19
|
+
Requires-Dist: unique-sdk>=2026.24.0
|
|
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
|
|
@@ -31,6 +31,7 @@ Requires-Dist: deepdiff>=8.6.1,<9
|
|
|
31
31
|
Requires-Dist: pypandoc>=1.16.2,<2
|
|
32
32
|
Requires-Dist: tenacity>=9.1.4
|
|
33
33
|
Requires-Dist: pydantic-core>=2.41.5
|
|
34
|
+
Requires-Dist: cachetools>=5.0,<6
|
|
34
35
|
Requires-Dist: fastapi>=0.121.0,<0.122 ; extra == 'fastapi'
|
|
35
36
|
Requires-Dist: starlette>=0.49.1 ; extra == 'fastapi'
|
|
36
37
|
Requires-Dist: uvicorn>=0.37.0,<0.38 ; extra == 'fastapi'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "unique_toolkit"
|
|
3
|
-
version = "2026.
|
|
3
|
+
version = "2026.24.0"
|
|
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.
|
|
31
|
+
"unique-sdk>=2026.24.0",
|
|
32
32
|
"jambo>=0.1.2,<0.2",
|
|
33
33
|
"jinja2>=3.1.6,<4",
|
|
34
34
|
"docxtpl>=0.20.1,<0.21",
|
|
@@ -43,6 +43,7 @@ dependencies = [
|
|
|
43
43
|
"pypandoc>=1.16.2,<2",
|
|
44
44
|
"tenacity>=9.1.4",
|
|
45
45
|
"pydantic-core>=2.41.5",
|
|
46
|
+
"cachetools>=5.0,<6",
|
|
46
47
|
]
|
|
47
48
|
|
|
48
49
|
[project.optional-dependencies]
|
|
@@ -60,7 +61,6 @@ fastapi = [
|
|
|
60
61
|
monitoring = [
|
|
61
62
|
"prometheus_client>=0.24.1,<1",
|
|
62
63
|
]
|
|
63
|
-
|
|
64
64
|
[build-system]
|
|
65
65
|
requires = ["uv_build>=0.8.14,<0.9.0"]
|
|
66
66
|
build-backend = "uv_build"
|
|
@@ -69,13 +69,15 @@ build-backend = "uv_build"
|
|
|
69
69
|
module-root = ""
|
|
70
70
|
|
|
71
71
|
[dependency-groups]
|
|
72
|
-
dev = [
|
|
72
|
+
dev = [
|
|
73
|
+
"types-cachetools>=5.0,<6",
|
|
74
|
+
]
|
|
73
75
|
|
|
74
76
|
[tool.uv]
|
|
75
77
|
exclude-newer = "2 weeks"
|
|
76
78
|
constraint-dependencies = [
|
|
77
79
|
"starlette>=0.49.1",
|
|
78
|
-
"lxml>=
|
|
80
|
+
"lxml>=6.1.0",
|
|
79
81
|
]
|
|
80
82
|
|
|
81
83
|
[tool.uv.exclude-newer-package]
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
from importlib import import_module
|
|
2
|
+
from typing import TYPE_CHECKING, Any
|
|
3
|
+
|
|
4
|
+
if TYPE_CHECKING:
|
|
5
|
+
from unique_toolkit.chat import ChatService as ChatService
|
|
6
|
+
from unique_toolkit.content import ContentService as ContentService
|
|
7
|
+
from unique_toolkit.data_extraction import (
|
|
8
|
+
StructuredOutputDataExtractor as StructuredOutputDataExtractor,
|
|
9
|
+
)
|
|
10
|
+
from unique_toolkit.data_extraction import (
|
|
11
|
+
StructuredOutputDataExtractorConfig as StructuredOutputDataExtractorConfig,
|
|
12
|
+
)
|
|
13
|
+
from unique_toolkit.embedding import EmbeddingService as EmbeddingService
|
|
14
|
+
from unique_toolkit.framework_utilities.openai.client import (
|
|
15
|
+
get_async_openai_client as get_async_openai_client,
|
|
16
|
+
)
|
|
17
|
+
from unique_toolkit.framework_utilities.openai.client import (
|
|
18
|
+
get_openai_client as get_openai_client,
|
|
19
|
+
)
|
|
20
|
+
from unique_toolkit.language_model import (
|
|
21
|
+
LanguageModelMessages as LanguageModelMessages,
|
|
22
|
+
)
|
|
23
|
+
from unique_toolkit.language_model import LanguageModelName as LanguageModelName
|
|
24
|
+
from unique_toolkit.language_model import (
|
|
25
|
+
LanguageModelService as LanguageModelService,
|
|
26
|
+
)
|
|
27
|
+
from unique_toolkit.language_model import (
|
|
28
|
+
LanguageModelToolDescription as LanguageModelToolDescription,
|
|
29
|
+
)
|
|
30
|
+
from unique_toolkit.services.knowledge_base import (
|
|
31
|
+
KnowledgeBaseService as KnowledgeBaseService,
|
|
32
|
+
)
|
|
33
|
+
from unique_toolkit.short_term_memory import (
|
|
34
|
+
ShortTermMemoryService as ShortTermMemoryService,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
_EXPORTS: dict[str, tuple[str, str]] = {
|
|
38
|
+
"ChatService": ("unique_toolkit.chat", "ChatService"),
|
|
39
|
+
"ContentService": ("unique_toolkit.content", "ContentService"),
|
|
40
|
+
"EmbeddingService": ("unique_toolkit.embedding", "EmbeddingService"),
|
|
41
|
+
"get_openai_client": (
|
|
42
|
+
"unique_toolkit.framework_utilities.openai.client",
|
|
43
|
+
"get_openai_client",
|
|
44
|
+
),
|
|
45
|
+
"get_async_openai_client": (
|
|
46
|
+
"unique_toolkit.framework_utilities.openai.client",
|
|
47
|
+
"get_async_openai_client",
|
|
48
|
+
),
|
|
49
|
+
"KnowledgeBaseService": (
|
|
50
|
+
"unique_toolkit.services.knowledge_base",
|
|
51
|
+
"KnowledgeBaseService",
|
|
52
|
+
),
|
|
53
|
+
"LanguageModelMessages": (
|
|
54
|
+
"unique_toolkit.language_model",
|
|
55
|
+
"LanguageModelMessages",
|
|
56
|
+
),
|
|
57
|
+
"LanguageModelName": ("unique_toolkit.language_model", "LanguageModelName"),
|
|
58
|
+
"LanguageModelService": ("unique_toolkit.language_model", "LanguageModelService"),
|
|
59
|
+
"LanguageModelToolDescription": (
|
|
60
|
+
"unique_toolkit.language_model",
|
|
61
|
+
"LanguageModelToolDescription",
|
|
62
|
+
),
|
|
63
|
+
"ShortTermMemoryService": (
|
|
64
|
+
"unique_toolkit.short_term_memory",
|
|
65
|
+
"ShortTermMemoryService",
|
|
66
|
+
),
|
|
67
|
+
"StructuredOutputDataExtractor": (
|
|
68
|
+
"unique_toolkit.data_extraction",
|
|
69
|
+
"StructuredOutputDataExtractor",
|
|
70
|
+
),
|
|
71
|
+
"StructuredOutputDataExtractorConfig": (
|
|
72
|
+
"unique_toolkit.data_extraction",
|
|
73
|
+
"StructuredOutputDataExtractorConfig",
|
|
74
|
+
),
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
# Conditionally import config_checker (requires pydantic-settings)
|
|
78
|
+
_CONFIG_CHECKER_AVAILABLE: bool = False
|
|
79
|
+
try:
|
|
80
|
+
from unique_toolkit._common.config_checker import (
|
|
81
|
+
ConfigDiffer, # noqa: F401, I001
|
|
82
|
+
ConfigEntry, # noqa: F401, I001
|
|
83
|
+
ConfigExporter, # noqa: F401, I001
|
|
84
|
+
ConfigRegistry, # noqa: F401, I001
|
|
85
|
+
ConfigValidator, # noqa: F401, I001
|
|
86
|
+
DefaultChangeReport, # noqa: F401, I001
|
|
87
|
+
ExportManifest, # noqa: F401, I001
|
|
88
|
+
ValidationReport, # noqa: F401, I001
|
|
89
|
+
register_config, # noqa: F401, I001
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
_CONFIG_CHECKER_AVAILABLE = True # pyright: ignore[reportConstantRedefinition]
|
|
93
|
+
except ImportError:
|
|
94
|
+
pass
|
|
95
|
+
|
|
96
|
+
# Conditionally import langchain utilities if langchain is installed
|
|
97
|
+
_LANGCHAIN_AVAILABLE: bool = False
|
|
98
|
+
try:
|
|
99
|
+
from unique_toolkit.framework_utilities.langchain.client import get_langchain_client # noqa: F401, I001
|
|
100
|
+
|
|
101
|
+
_LANGCHAIN_AVAILABLE = True # pyright: ignore[reportConstantRedefinition]
|
|
102
|
+
except ImportError:
|
|
103
|
+
pass
|
|
104
|
+
|
|
105
|
+
# You can add other classes you frequently use here as well
|
|
106
|
+
|
|
107
|
+
__all__ = [
|
|
108
|
+
"ChatService",
|
|
109
|
+
"ContentService",
|
|
110
|
+
"EmbeddingService",
|
|
111
|
+
"get_openai_client",
|
|
112
|
+
"get_async_openai_client",
|
|
113
|
+
"KnowledgeBaseService",
|
|
114
|
+
"LanguageModelMessages",
|
|
115
|
+
"LanguageModelName",
|
|
116
|
+
"LanguageModelService",
|
|
117
|
+
"LanguageModelToolDescription",
|
|
118
|
+
"ShortTermMemoryService",
|
|
119
|
+
"StructuredOutputDataExtractor",
|
|
120
|
+
"StructuredOutputDataExtractorConfig",
|
|
121
|
+
]
|
|
122
|
+
|
|
123
|
+
# Add config_checker exports if available
|
|
124
|
+
if _CONFIG_CHECKER_AVAILABLE:
|
|
125
|
+
__all__.extend(
|
|
126
|
+
[
|
|
127
|
+
"ConfigDiffer",
|
|
128
|
+
"ConfigEntry",
|
|
129
|
+
"ConfigExporter",
|
|
130
|
+
"ConfigRegistry",
|
|
131
|
+
"ConfigValidator",
|
|
132
|
+
"DefaultChangeReport",
|
|
133
|
+
"ExportManifest",
|
|
134
|
+
"ValidationReport",
|
|
135
|
+
"register_config",
|
|
136
|
+
]
|
|
137
|
+
)
|
|
138
|
+
# Add langchain-specific exports if available
|
|
139
|
+
if _LANGCHAIN_AVAILABLE:
|
|
140
|
+
__all__.append("get_langchain_client")
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def __getattr__(name: str) -> Any:
|
|
144
|
+
export = _EXPORTS.get(name)
|
|
145
|
+
if export is None:
|
|
146
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
147
|
+
|
|
148
|
+
module_name, attribute_name = export
|
|
149
|
+
return getattr(import_module(module_name), attribute_name)
|
|
@@ -8,6 +8,8 @@ from typing import Any
|
|
|
8
8
|
from unique_toolkit.content.smart_rules import (
|
|
9
9
|
Operator,
|
|
10
10
|
Statement,
|
|
11
|
+
UniqueQL,
|
|
12
|
+
uniqueql_to_dict,
|
|
11
13
|
)
|
|
12
14
|
|
|
13
15
|
_UQL_AND = "and"
|
|
@@ -29,16 +31,17 @@ def build_folder_id_in_clause(scope_ids: list[str]) -> dict[str, Any]:
|
|
|
29
31
|
|
|
30
32
|
def merge_scope_clause_into_metadata_filter(
|
|
31
33
|
scope_clause: Mapping[str, Any],
|
|
32
|
-
metadata_filter:
|
|
34
|
+
metadata_filter: UniqueQL | Mapping[str, Any] | None,
|
|
33
35
|
) -> dict[str, Any]:
|
|
34
36
|
"""AND-merge *scope_clause* with *metadata_filter*, flattening a top-level ``and``."""
|
|
35
37
|
scope_dict = dict(scope_clause)
|
|
36
|
-
|
|
38
|
+
metadata_dict = uniqueql_to_dict(metadata_filter)
|
|
39
|
+
if not metadata_dict:
|
|
37
40
|
return scope_dict
|
|
38
|
-
inner_and =
|
|
41
|
+
inner_and = metadata_dict.get(_UQL_AND)
|
|
39
42
|
if isinstance(inner_and, list):
|
|
40
43
|
return {_UQL_AND: [scope_dict, *inner_and]}
|
|
41
|
-
return {_UQL_AND: [scope_dict,
|
|
44
|
+
return {_UQL_AND: [scope_dict, metadata_dict]}
|
|
42
45
|
|
|
43
46
|
|
|
44
47
|
__all__ = [
|
|
@@ -974,7 +974,12 @@ def ui_schema_for_model(
|
|
|
974
974
|
node["items"] = item_node
|
|
975
975
|
|
|
976
976
|
# Dict -> additionalProperties (value side)
|
|
977
|
-
|
|
977
|
+
# Skip when the node already carries a ui:widget (fully-specified
|
|
978
|
+
# widget) or an anyOf (fully-specified type branching): walking the
|
|
979
|
+
# dict value type in those cases adds a spurious "additionalProperties"
|
|
980
|
+
# node that confuses RJSF renderers. Presentation-only meta such as
|
|
981
|
+
# ui:expandable or ui:title does NOT prevent the walk.
|
|
982
|
+
elif origin is dict and "ui:widget" not in node and "anyOf" not in node:
|
|
978
983
|
_key_t, val_t = get_args(base) or (Any, Any)
|
|
979
984
|
val_base, val_meta = _walk_annotated_chain(val_t)
|
|
980
985
|
val_base = _unwrap_optional(val_base)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import Self
|
|
3
|
+
|
|
4
|
+
from pydantic import Field, model_validator
|
|
5
|
+
|
|
6
|
+
from unique_toolkit.agentic.tools.a2a.evaluation import SubAgentEvaluationConfig
|
|
7
|
+
from unique_toolkit.agentic.tools.a2a.postprocessing import (
|
|
8
|
+
SubAgentDisplayConfig,
|
|
9
|
+
SubAgentResponseDisplayMode,
|
|
10
|
+
)
|
|
11
|
+
from unique_toolkit.agentic.tools.a2a.tool import SubAgentToolConfig
|
|
12
|
+
|
|
13
|
+
_LOGGER = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# SubAgentToolConfig with display and evaluation configs
|
|
17
|
+
class ExtendedSubAgentToolConfig(SubAgentToolConfig):
|
|
18
|
+
response_display_config: SubAgentDisplayConfig = Field(
|
|
19
|
+
default_factory=SubAgentDisplayConfig,
|
|
20
|
+
description="Configuration for how to display the sub-agent response.",
|
|
21
|
+
)
|
|
22
|
+
evaluation_config: SubAgentEvaluationConfig = Field(
|
|
23
|
+
default_factory=SubAgentEvaluationConfig,
|
|
24
|
+
description="Configuration for handling assessments of the sub-agent response.",
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
@model_validator(mode="after")
|
|
28
|
+
def _ensure_response_display_config_off_when_sub_agent_response_passthrough(
|
|
29
|
+
self,
|
|
30
|
+
) -> Self:
|
|
31
|
+
if (
|
|
32
|
+
self.passthrough_config.enabled
|
|
33
|
+
and self.response_display_config.mode != SubAgentResponseDisplayMode.HIDDEN
|
|
34
|
+
):
|
|
35
|
+
_LOGGER.warning(
|
|
36
|
+
"SubAgent (assistant_id=%r): `passthrough_config.enabled=True` but `response_display_config.mode` is not HIDDEN. "
|
|
37
|
+
"Overriding `response_display_config.mode` to HIDDEN.",
|
|
38
|
+
self.assistant_id,
|
|
39
|
+
)
|
|
40
|
+
self.response_display_config.mode = SubAgentResponseDisplayMode.HIDDEN
|
|
41
|
+
return self
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
from unique_toolkit.agentic.tools.a2a.tool.config import (
|
|
2
|
+
SubAgentPassthroughConfig,
|
|
3
|
+
SubAgentToolConfig,
|
|
4
|
+
)
|
|
5
|
+
from unique_toolkit.agentic.tools.a2a.tool.service import SubAgentTool
|
|
6
|
+
|
|
7
|
+
__all__ = ["SubAgentPassthroughConfig", "SubAgentTool", "SubAgentToolConfig"]
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import logging
|
|
1
2
|
import re
|
|
2
3
|
from enum import StrEnum
|
|
3
|
-
from typing import Annotated, Generic, Literal, TypeVar
|
|
4
|
+
from typing import Annotated, Generic, Literal, Self, TypeVar
|
|
4
5
|
|
|
5
|
-
from pydantic import Field, field_validator
|
|
6
|
+
from pydantic import Field, field_validator, model_validator
|
|
6
7
|
from pydantic.main import BaseModel
|
|
7
8
|
|
|
8
9
|
from unique_toolkit._common.pydantic.rjsf_tags import RJSFMetaTag
|
|
@@ -26,6 +27,9 @@ class SystemReminderConfig(BaseModel, Generic[T]):
|
|
|
26
27
|
type: T
|
|
27
28
|
|
|
28
29
|
|
|
30
|
+
_LOGGER = logging.getLogger(__name__)
|
|
31
|
+
|
|
32
|
+
|
|
29
33
|
_SYSTEM_REMINDER_FIELD_DESCRIPTION = """
|
|
30
34
|
The reminder to add to the tool response. The reminder can be a Jinja template and can contain the following placeholders:
|
|
31
35
|
- {{ display_name }}: The display name of the sub agent.
|
|
@@ -103,6 +107,19 @@ This is the message that will be sent to the sub-agent.
|
|
|
103
107
|
""".strip()
|
|
104
108
|
|
|
105
109
|
|
|
110
|
+
class SubAgentPassthroughConfig(BaseModel):
|
|
111
|
+
model_config = get_configuration_dict()
|
|
112
|
+
|
|
113
|
+
enabled: bool = Field(
|
|
114
|
+
default=False,
|
|
115
|
+
description="If set, this sub agent's response will be directly displayed to the user once the agent is called, ending the orchestrator loop.",
|
|
116
|
+
)
|
|
117
|
+
include_assessments: bool = Field(
|
|
118
|
+
default=True,
|
|
119
|
+
description="If set, this sub agent's assessments will be added to the main agent response.",
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
|
|
106
123
|
class SubAgentToolConfig(BaseToolConfig):
|
|
107
124
|
model_config = get_configuration_dict()
|
|
108
125
|
|
|
@@ -171,10 +188,12 @@ class SubAgentToolConfig(BaseToolConfig):
|
|
|
171
188
|
poll_interval: Annotated[float, RJSFMetaTag.NumberWidget.updown()] = Field(
|
|
172
189
|
default=1.0,
|
|
173
190
|
description="Time interval in seconds between polling attempts when waiting for sub-agent response.",
|
|
191
|
+
gt=0,
|
|
174
192
|
)
|
|
175
193
|
max_wait: Annotated[float, RJSFMetaTag.NumberWidget.updown()] = Field(
|
|
176
194
|
default=120.0,
|
|
177
195
|
description="Maximum time in seconds to wait for the sub-agent response before timing out.",
|
|
196
|
+
gt=0,
|
|
178
197
|
)
|
|
179
198
|
stop_condition: Literal["stoppedStreamingAt", "completedAt"] = Field(
|
|
180
199
|
default="completedAt",
|
|
@@ -197,6 +216,11 @@ class SubAgentToolConfig(BaseToolConfig):
|
|
|
197
216
|
default=False,
|
|
198
217
|
description="If set, the sub-agent response will be interpreted as a list of content chunks.",
|
|
199
218
|
)
|
|
219
|
+
passthrough_config: SubAgentPassthroughConfig = Field(
|
|
220
|
+
default_factory=SubAgentPassthroughConfig,
|
|
221
|
+
description="Configuration for streaming the sub-agent response directly back to the user.",
|
|
222
|
+
title="Direct Streaming Configuration (Experimental)",
|
|
223
|
+
)
|
|
200
224
|
|
|
201
225
|
system_reminders_config: list[
|
|
202
226
|
Annotated[
|
|
@@ -207,3 +231,28 @@ class SubAgentToolConfig(BaseToolConfig):
|
|
|
207
231
|
default=[],
|
|
208
232
|
description="Configuration for the system reminders to add to the tool response.",
|
|
209
233
|
)
|
|
234
|
+
|
|
235
|
+
@model_validator(mode="after")
|
|
236
|
+
def _ensure_response_passthrough_and_returns_content_chunks_mutually_exclusive(
|
|
237
|
+
self,
|
|
238
|
+
) -> Self:
|
|
239
|
+
if self.passthrough_config.enabled and self.returns_content_chunks:
|
|
240
|
+
raise ValueError(
|
|
241
|
+
f"SubAgent (assistant_id={self.assistant_id!r}): "
|
|
242
|
+
"`passthrough_config.enabled` and `returns_content_chunks` are mutually exclusive."
|
|
243
|
+
)
|
|
244
|
+
return self
|
|
245
|
+
|
|
246
|
+
@model_validator(mode="after")
|
|
247
|
+
def _ensure_use_sub_agent_references_off_when_tool_response_passthrough(
|
|
248
|
+
self,
|
|
249
|
+
) -> Self:
|
|
250
|
+
if self.passthrough_config.enabled and self.use_sub_agent_references:
|
|
251
|
+
_LOGGER.warning(
|
|
252
|
+
"SubAgent (assistant_id=%r): `passthrough_config.enabled=True` and `use_sub_agent_references=True`. "
|
|
253
|
+
"`use_sub_agent_references` will be overridden to False.",
|
|
254
|
+
self.assistant_id,
|
|
255
|
+
)
|
|
256
|
+
self.use_sub_agent_references = False
|
|
257
|
+
|
|
258
|
+
return self
|
|
@@ -11,6 +11,7 @@ from pydantic import Field, TypeAdapter, create_model
|
|
|
11
11
|
from unique_sdk.api_resources._space import Space
|
|
12
12
|
from unique_sdk.utils.chat_in_space import send_message_and_wait_for_completion
|
|
13
13
|
|
|
14
|
+
from unique_toolkit._common.execution import SafeTaskExecutor
|
|
14
15
|
from unique_toolkit._common.referencing import (
|
|
15
16
|
get_all_ref_numbers,
|
|
16
17
|
get_detection_pattern_for_ref,
|
|
@@ -41,9 +42,15 @@ from unique_toolkit.agentic.tools.tool_progress_reporter import (
|
|
|
41
42
|
ToolProgressReporter,
|
|
42
43
|
)
|
|
43
44
|
from unique_toolkit.app import ChatEvent
|
|
44
|
-
from unique_toolkit.chat.schemas import
|
|
45
|
+
from unique_toolkit.chat.schemas import (
|
|
46
|
+
ChatMessageAssessmentLabel,
|
|
47
|
+
ChatMessageAssessmentStatus,
|
|
48
|
+
ChatMessageAssessmentType,
|
|
49
|
+
MessageLog,
|
|
50
|
+
MessageLogStatus,
|
|
51
|
+
)
|
|
45
52
|
from unique_toolkit.chat.service import ChatService
|
|
46
|
-
from unique_toolkit.content import ContentChunk
|
|
53
|
+
from unique_toolkit.content import ContentChunk, ContentReference
|
|
47
54
|
from unique_toolkit.language_model import (
|
|
48
55
|
LanguageModelFunction,
|
|
49
56
|
LanguageModelToolDescription,
|
|
@@ -146,6 +153,10 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
146
153
|
def tool_format_information_for_user_prompt(self) -> str:
|
|
147
154
|
return self.config.tool_format_information_for_user_prompt
|
|
148
155
|
|
|
156
|
+
@override
|
|
157
|
+
def takes_control(self) -> bool:
|
|
158
|
+
return self.config.passthrough_config.enabled
|
|
159
|
+
|
|
149
160
|
@override
|
|
150
161
|
def evaluation_check_list(self) -> list[EvaluationMetricName]:
|
|
151
162
|
return [EvaluationMetricName.SUB_AGENT] if self._should_run_evaluation else []
|
|
@@ -215,6 +226,7 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
215
226
|
self._should_run_evaluation |= (
|
|
216
227
|
response["assessment"] is not None
|
|
217
228
|
and len(response["assessment"]) > 0
|
|
229
|
+
and not self.config.passthrough_config.enabled
|
|
218
230
|
) # Run evaluation if any sub agent returned an assessment
|
|
219
231
|
|
|
220
232
|
self._notify_watcher(response, sequence_number, timestamp)
|
|
@@ -273,6 +285,9 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
273
285
|
active_message_log=active_message_log,
|
|
274
286
|
)
|
|
275
287
|
|
|
288
|
+
if self.config.passthrough_config.enabled:
|
|
289
|
+
await self._display_sub_agent_response(response)
|
|
290
|
+
|
|
276
291
|
return ToolCallResponse(
|
|
277
292
|
id=tool_call.id,
|
|
278
293
|
name=tool_call.name,
|
|
@@ -303,6 +318,68 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
303
318
|
)
|
|
304
319
|
raise e
|
|
305
320
|
|
|
321
|
+
async def _display_sub_agent_response(self, response: Space.Message) -> None:
|
|
322
|
+
await self._publish_sub_agent_response(response, set_completed_at=True)
|
|
323
|
+
|
|
324
|
+
if self.config.passthrough_config.include_assessments:
|
|
325
|
+
await self._forward_sub_agent_assessments(response["assessment"] or [])
|
|
326
|
+
|
|
327
|
+
async def _publish_sub_agent_response(
|
|
328
|
+
self,
|
|
329
|
+
response: Space.Message,
|
|
330
|
+
*,
|
|
331
|
+
set_completed_at: bool,
|
|
332
|
+
) -> None:
|
|
333
|
+
await self._chat_service.modify_assistant_message_async(
|
|
334
|
+
content=response["text"],
|
|
335
|
+
original_content=response["originalText"],
|
|
336
|
+
references=[
|
|
337
|
+
ContentReference.from_sdk_reference(ref)
|
|
338
|
+
for ref in response["references"] or []
|
|
339
|
+
],
|
|
340
|
+
set_completed_at=set_completed_at,
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
async def _publish_sub_agent_response_update(
|
|
344
|
+
self,
|
|
345
|
+
response: Space.Message,
|
|
346
|
+
) -> None:
|
|
347
|
+
try:
|
|
348
|
+
await self._publish_sub_agent_response(response, set_completed_at=False)
|
|
349
|
+
except Exception:
|
|
350
|
+
logger.warning(
|
|
351
|
+
"Failed to publish streaming sub agent passthrough update",
|
|
352
|
+
exc_info=True,
|
|
353
|
+
)
|
|
354
|
+
|
|
355
|
+
async def _forward_sub_agent_assessments(
|
|
356
|
+
self,
|
|
357
|
+
assessments: list[unique_sdk.Space.Assessment],
|
|
358
|
+
) -> None:
|
|
359
|
+
async def _create_one_assessment(
|
|
360
|
+
assessment: unique_sdk.Space.Assessment,
|
|
361
|
+
) -> None:
|
|
362
|
+
await self._chat_service.create_message_assessment_async(
|
|
363
|
+
assistant_message_id=self._chat_service._assistant_message_id,
|
|
364
|
+
status=ChatMessageAssessmentStatus(assessment["status"]),
|
|
365
|
+
type=ChatMessageAssessmentType(assessment["type"]),
|
|
366
|
+
title=assessment["title"],
|
|
367
|
+
explanation=assessment["explanation"],
|
|
368
|
+
label=ChatMessageAssessmentLabel(assessment["label"]),
|
|
369
|
+
is_visible=assessment["isVisible"],
|
|
370
|
+
)
|
|
371
|
+
|
|
372
|
+
if not assessments:
|
|
373
|
+
return
|
|
374
|
+
|
|
375
|
+
task_executor = SafeTaskExecutor(logger=logger)
|
|
376
|
+
await asyncio.gather(
|
|
377
|
+
*(
|
|
378
|
+
task_executor.execute_async(_create_one_assessment, a)
|
|
379
|
+
for a in assessments
|
|
380
|
+
),
|
|
381
|
+
)
|
|
382
|
+
|
|
306
383
|
async def _get_chat_id(self) -> str | None:
|
|
307
384
|
if not self.config.reuse_chat:
|
|
308
385
|
return None
|
|
@@ -388,6 +465,12 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
388
465
|
active_message_log: MessageLog | None = None,
|
|
389
466
|
) -> unique_sdk.Space.Message:
|
|
390
467
|
try:
|
|
468
|
+
on_message_update = (
|
|
469
|
+
self._publish_sub_agent_response_update
|
|
470
|
+
if self.config.passthrough_config.enabled
|
|
471
|
+
else None
|
|
472
|
+
)
|
|
473
|
+
|
|
391
474
|
return await send_message_and_wait_for_completion(
|
|
392
475
|
user_id=self._user_id,
|
|
393
476
|
assistant_id=self.config.assistant_id,
|
|
@@ -403,6 +486,7 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
403
486
|
parentChatId=self._event.payload.chat_id,
|
|
404
487
|
parentAssistantId=self.config.assistant_id,
|
|
405
488
|
),
|
|
489
|
+
on_message_update=on_message_update,
|
|
406
490
|
)
|
|
407
491
|
except TimeoutError as e:
|
|
408
492
|
await self._notify_progress(
|
|
@@ -147,6 +147,7 @@ HTML files — CRITICAL rules:
|
|
|
147
147
|
- The main content container MUST have a bounded, measurable height. For charts/dashboards either (a) give the chart container an explicit pixel height (e.g. `height: 500px`) or (b) use `aspect-ratio` together with a `width` so height is derived. Do NOT leave the top-level container with no intrinsic height.
|
|
148
148
|
- Do NOT use `position: fixed` or `position: absolute` on top-level layout elements — they remove the element from the flow and the iframe cannot measure it.
|
|
149
149
|
- Plotly users — CRITICAL: Plotly's `fig.write_html(...)` / `fig.to_html(...)` defaults emit a `<div class="plotly-graph-div" style="height:100%; width:100%;">` with no wrapper height (iframe collapse) **and** inline the entire Plotly JS bundle (~3MB), which often fails KB upload. You MUST pass `include_plotlyjs="cdn"`, `full_html=True`, and `default_height` (and `default_width` when relevant). Example: `fig.write_html(path, full_html=True, include_plotlyjs="cdn", default_height="600px")`. If you hand-write the wrapper HTML around a Plotly div, wrap the `plotly-graph-div` in a container with an explicit pixel height and never leave the graph div at `height:100%`.
|
|
150
|
+
- Plotly header overlap — CRITICAL: When a chart combines a horizontal legend positioned above the axes (`legend.y > 1`), range-selector buttons (`rangeselector`), and subplot title annotations, all three compete for the same top region and will overlap unless you reserve enough space. Rules: (1) set `fig.update_layout(margin=dict(t=150))` (or more) whenever any two of those elements coexist; (2) place a horizontal legend at `y=1.15` or higher (not `y=1.0`–`1.05`) so it clears the range-selector row; (3) for annotation-based subplot titles use `y` values ≥ 0.05 above the legend's `y` value; (4) if a chart also has range-sliders at the bottom, add sufficient bottom margin (`margin.b ≥ 80`) to avoid clipping the slider. Never rely on Plotly's default top margin of 80 px when the header contains more than a single title.
|
|
150
151
|
- Single-chart HTML files — always add an outer wrapper with an explicit `height` (e.g. `<div style="height:600px">…chart…</div>`) so the document has a non-zero intrinsic height, even if the chart library defaults to percentage sizing.
|
|
151
152
|
- Apply clean, readable typography: prefer system fonts (`-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif`) and sufficient contrast (WCAG AA minimum).
|
|
152
153
|
- Use semantic HTML elements (`<table>` for tabular data, `<button>` for actions, `<h1>`–`<h6>` for headings, `alt` attributes on `<img>` tags). Avoid using `<div>` for everything.
|
|
@@ -160,6 +161,7 @@ Handling User Queries:
|
|
|
160
161
|
- Whenever the user query requires using the python tool, you must always think first about the steps required.
|
|
161
162
|
- CRITICAL: If any step generates a plot or visualization as a PNG, use **matplotlib** — that code block MUST include `plt.savefig('/mnt/data/<filename>.png', bbox_inches='tight')` and `plt.close()` as the final lines. Code that only calls `plt.show()` without saving will NOT display the image to the user.
|
|
162
163
|
- CRITICAL: NEVER reference a `sandbox:/mnt/data/<filename>` link unless you have already executed code in this response that saved that exact file. Referencing a file that was not created by executed code will result in a broken link.
|
|
164
|
+
- Self-check before writing any sandbox link: look back at the code blocks you executed in this response. Is there a block that explicitly saves this exact filename to `/mnt/data/`? If not, execute the code first — then reference the file.
|
|
163
165
|
- CRITICAL: The sandbox has NO internet access. NEVER use `requests`, `httpx`, `urllib`, or any other HTTP library to fetch data from the web — these calls will always fail. If the user's query requires live web data (e.g. market prices, news, APIs), you MUST retrieve it using the web search tool first and then pass the result into the code interpreter.
|
|
164
166
|
- CRITICAL: For Excel files (`.xls`, `.xlsx`) and CSV files uploaded to the chat, ALWAYS use this tool to read and process them (e.g. `pandas.read_excel`, `pandas.read_csv`, `openpyxl`). Do NOT rely on the chat's text content or prior ingestion for spreadsheet data — the raw file contents are only accessible via code execution from `/mnt/data/<filename>`.
|
|
165
167
|
- For calculation, retrieval, or exploratory-analysis answers, return the result concisely in the chat as markdown (key numbers inline, short tables where useful). Do NOT produce a separate artifact file (HTML, PDF, etc.) unless the user explicitly asked for a downloadable output or the request clearly calls for a dashboard/report.
|
|
@@ -620,13 +620,16 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
620
620
|
self._log.info("Fence injection modified the message text")
|
|
621
621
|
|
|
622
622
|
_warn_missing_content_ids(loop_response.message.text or "", self._content_map)
|
|
623
|
+
ci_ran = bool(loop_response.code_interpreter_calls)
|
|
623
624
|
loop_response.message.text, dangling_replaced = _replace_dangling_sandbox_links(
|
|
624
|
-
loop_response.message.text
|
|
625
|
+
loop_response.message.text, ci_ran=ci_ran
|
|
625
626
|
)
|
|
626
627
|
changed |= dangling_replaced
|
|
627
628
|
if dangling_replaced:
|
|
628
629
|
self._log.warning(
|
|
629
|
-
"apply_postprocessing found and replaced dangling sandbox links"
|
|
630
|
+
"apply_postprocessing found and replaced dangling sandbox links "
|
|
631
|
+
"(ci_ran=%s)",
|
|
632
|
+
ci_ran,
|
|
630
633
|
)
|
|
631
634
|
|
|
632
635
|
apply_ms = (time.monotonic() - apply_t0) * 1000
|
|
@@ -1254,7 +1257,9 @@ _SANDBOX_MARKDOWN_LINK_RE = re.compile(r"!?\[.*?\]\(sandbox:/mnt/data/\S+?\)")
|
|
|
1254
1257
|
_SANDBOX_FILENAME_RE = re.compile(r"sandbox:/mnt/data/([^)\s]+)")
|
|
1255
1258
|
|
|
1256
1259
|
|
|
1257
|
-
def _replace_dangling_sandbox_links(
|
|
1260
|
+
def _replace_dangling_sandbox_links(
|
|
1261
|
+
text: str, *, ci_ran: bool = True
|
|
1262
|
+
) -> tuple[str, bool]:
|
|
1258
1263
|
"""Replace any remaining sandbox:/mnt/data/ markdown links with a per-file notice.
|
|
1259
1264
|
|
|
1260
1265
|
A dangling link means either the LLM hallucinated a file reference (the sandbox
|
|
@@ -1263,6 +1268,12 @@ def _replace_dangling_sandbox_links(text: str) -> tuple[str, bool]:
|
|
|
1263
1268
|
cases the user would see a broken link; this function replaces each such link with
|
|
1264
1269
|
an actionable message that names the specific file, and logs a warning so the
|
|
1265
1270
|
incident is visible in production logs.
|
|
1271
|
+
|
|
1272
|
+
Args:
|
|
1273
|
+
text: The message text to scan for dangling sandbox links.
|
|
1274
|
+
ci_ran: Whether the code interpreter was called at all this turn. When
|
|
1275
|
+
``False`` the LLM emitted a sandbox link without invoking the tool
|
|
1276
|
+
(hallucination); a more accurate message is shown to the user.
|
|
1266
1277
|
"""
|
|
1267
1278
|
if not _SANDBOX_MARKDOWN_LINK_RE.search(text):
|
|
1268
1279
|
return text, False
|
|
@@ -1271,11 +1282,17 @@ def _replace_dangling_sandbox_links(text: str) -> tuple[str, bool]:
|
|
|
1271
1282
|
filename_match = _SANDBOX_FILENAME_RE.search(m.group())
|
|
1272
1283
|
filename = filename_match.group(1) if filename_match else "the file"
|
|
1273
1284
|
logger.warning(
|
|
1274
|
-
"Dangling sandbox link found in final text: '%s'. "
|
|
1275
|
-
"The file was either never
|
|
1285
|
+
"Dangling sandbox link found in final text: '%s'. ci_ran=%s. "
|
|
1286
|
+
"The file was either never generated or the link format did not match "
|
|
1276
1287
|
"the expected pattern — replacing with per-file notice.",
|
|
1277
1288
|
m.group(),
|
|
1289
|
+
ci_ran,
|
|
1278
1290
|
)
|
|
1291
|
+
if not ci_ran:
|
|
1292
|
+
return (
|
|
1293
|
+
f"⚠️ The file *{filename}* was not generated. "
|
|
1294
|
+
"Please ask me to create it."
|
|
1295
|
+
)
|
|
1279
1296
|
return f"⚠️ The file *{filename}* could not be retrieved. You can ask me to regenerate it."
|
|
1280
1297
|
|
|
1281
1298
|
return _SANDBOX_MARKDOWN_LINK_RE.sub(_replacement, text), True
|