unique_toolkit 2026.36.0__tar.gz → 2026.36.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.36.0 → unique_toolkit-2026.36.0.dev0}/PKG-INFO +2 -2
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/pyproject.toml +2 -2
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -23
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/feature_flags/feature_flags.py +5 -9
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +1 -3
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/service.py +51 -1
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +48 -52
- unique_toolkit-2026.36.0.dev0/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +103 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -10
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic_table/__init__.py +0 -8
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic_table/schemas.py +2 -102
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic_table/service.py +31 -75
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/chat/responses_api.py +1 -3
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/content/functions.py +0 -34
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/__init__.py +3 -6
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/content_tree/__init__.py +18 -14
- unique_toolkit-2026.36.0.dev0/unique_toolkit/experimental/components/content_tree/functions.py +247 -0
- unique_toolkit-2026.36.0.dev0/unique_toolkit/experimental/components/content_tree/schemas.py +106 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/content_tree/service.py +83 -244
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/content_tree/__init__.py +10 -4
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +4 -7
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +8 -12
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/language_model/functions.py +2 -11
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/language_model/infos.py +0 -61
- unique_toolkit-2026.36.0.dev0/unique_toolkit/language_model/invocation_stats.py +77 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/language_model/service.py +1 -15
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/services/chat_service.py +7 -0
- unique_toolkit-2026.36.0/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +0 -213
- unique_toolkit-2026.36.0/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/office_preview.py +0 -154
- unique_toolkit-2026.36.0/unique_toolkit/experimental/components/content_tree/functions.py +0 -380
- unique_toolkit-2026.36.0/unique_toolkit/experimental/components/content_tree/schemas.py +0 -261
- unique_toolkit-2026.36.0/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_model_params.py +0 -133
- unique_toolkit-2026.36.0/unique_toolkit/language_model/invocation_stats.py +0 -173
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/README.md +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/metadata_filter_scope.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/exception.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_external_context.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/history_manager/settings.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/loop_runner/base.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/message_log_order.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/reference_manager/tests/test_external_context.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/ask_user_tool/tool.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/names.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_container.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_files.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_memory.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/builder.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/run_context.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic_table/synthetic_chat_event.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/app/feature_flags.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/app/find_env_file.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/chat/deprecated/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/README.md +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/_internal/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/_base.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/internal_search/base/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/identity/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/feature_flags/README.md +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/feature_flags/_graphql_client.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/feature_flags/_ttl_cache.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/feature_flags/client.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/feature_flags/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/feature_flags/settings.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/group/functions.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/group/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/user/functions.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/resources/user/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/experimental/testing/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/language_model/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/language_model/model_costs.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/language_model/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/language_model/settings.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/monitoring/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/monitoring/gunicorn.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/monitoring/middleware.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/monitoring/registry.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/monitoring/tracing.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/services/factory.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-2026.36.0 → unique_toolkit-2026.36.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.36.0
|
|
3
|
+
Version: 2026.36.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.36.0
|
|
19
|
+
Requires-Dist: unique-sdk>=2026.36.0.dev0,<2026.36.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.36.0"
|
|
3
|
+
version = "2026.36.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.36.0",
|
|
31
|
+
"unique-sdk>=2026.36.0.dev0,<2026.36.0rc0",
|
|
32
32
|
"jambo>=0.1.2,<0.2",
|
|
33
33
|
"jinja2>=3.1.6,<4",
|
|
34
34
|
"docxtpl>=0.20.1,<0.21",
|
|
@@ -739,20 +739,6 @@ class RJSFMetaTag:
|
|
|
739
739
|
return RJSFMetaTag({**union_attrs, "anyOf": any_of_branches})
|
|
740
740
|
|
|
741
741
|
|
|
742
|
-
class DynamicRJSFTag:
|
|
743
|
-
"""Defer RJSF metadata until ``ui_schema_for_model`` runs.
|
|
744
|
-
|
|
745
|
-
Use for env-driven admin locks (``ui:disabled``) that must reflect the
|
|
746
|
-
deployment environment at schema-generation time, not at module import.
|
|
747
|
-
"""
|
|
748
|
-
|
|
749
|
-
def __init__(self, factory: Callable[[], RJSFMetaTag]) -> None:
|
|
750
|
-
self._factory = factory
|
|
751
|
-
|
|
752
|
-
def resolve_rjsf_tag(self) -> RJSFMetaTag:
|
|
753
|
-
return self._factory()
|
|
754
|
-
|
|
755
|
-
|
|
756
742
|
# --------- Helpers ----------
|
|
757
743
|
_NONE_TYPES = {type(None)}
|
|
758
744
|
"""
|
|
@@ -799,12 +785,6 @@ def _collect_metatags(extras: list[Any]) -> dict[str, Any]:
|
|
|
799
785
|
"""
|
|
800
786
|
out: dict[str, Any] = {}
|
|
801
787
|
for x in extras:
|
|
802
|
-
resolve = getattr(x, "resolve_rjsf_tag", None)
|
|
803
|
-
if callable(resolve):
|
|
804
|
-
tag = resolve()
|
|
805
|
-
if isinstance(tag, RJSFMetaTag):
|
|
806
|
-
out.update(tag.attrs)
|
|
807
|
-
continue
|
|
808
788
|
if isinstance(x, RJSFMetaTag):
|
|
809
789
|
out.update(x.attrs)
|
|
810
790
|
return out
|
|
@@ -958,9 +938,6 @@ def ui_schema_for_model(
|
|
|
958
938
|
# Re-process the unwrapped type to extract metadata from the Annotated branch.
|
|
959
939
|
if not meta and get_origin(base) is Annotated:
|
|
960
940
|
base, meta = _walk_annotated_chain(base)
|
|
961
|
-
field_meta = _collect_metatags(list(field_info.metadata))
|
|
962
|
-
if field_meta:
|
|
963
|
-
meta = {**meta, **field_meta}
|
|
964
941
|
# Start with field-level metadata (flat dict)
|
|
965
942
|
if meta:
|
|
966
943
|
node.update(meta)
|
|
@@ -30,6 +30,7 @@ class FeatureFlagNames(StrEnum):
|
|
|
30
30
|
enable_web_search_argument_screening_un_18741 = (
|
|
31
31
|
"FEATURE_FLAG_ENABLE_WEB_SEARCH_ARGUMENT_SCREENING_UN_18741"
|
|
32
32
|
)
|
|
33
|
+
enable_new_answers_ui_un_14411 = "FEATURE_FLAG_ENABLE_NEW_ANSWERS_UI_UN_14411"
|
|
33
34
|
|
|
34
35
|
|
|
35
36
|
@deprecated(
|
|
@@ -82,25 +83,20 @@ class FeatureFlags(BaseSettings):
|
|
|
82
83
|
"""Feature flags loaded from environment variables.
|
|
83
84
|
|
|
84
85
|
Environment variables are automatically loaded based on field names.
|
|
85
|
-
For example, `
|
|
86
|
-
`
|
|
86
|
+
For example, `enable_new_answers_ui_un_14411` will be loaded from
|
|
87
|
+
`FEATURE_FLAG_ENABLE_NEW_ANSWERS_UI_UN_14411` (with the env_prefix).
|
|
87
88
|
|
|
88
89
|
Usage:
|
|
89
90
|
>>> flags = FeatureFlags()
|
|
90
91
|
>>> # Check if feature is enabled for a company
|
|
91
|
-
>>> flags.
|
|
92
|
+
>>> flags.enable_new_answers_ui_un_14411.is_enabled("company123")
|
|
92
93
|
>>> # Check global enablement
|
|
93
94
|
>>> bool(flags.enable_elicitation_un_15809)
|
|
94
95
|
"""
|
|
95
96
|
|
|
96
97
|
enable_new_answers_ui_un_14411: FeatureFlag = Field(
|
|
97
98
|
default=FeatureFlag([]),
|
|
98
|
-
description=(
|
|
99
|
-
"Retired (UN-24507): the new answers UI is always on now, no code "
|
|
100
|
-
"reads this field. Kept only so removing it doesn't trip the "
|
|
101
|
-
"config-checker's breaking-change gate on this settings model; "
|
|
102
|
-
"delete once that checker allows field removal."
|
|
103
|
-
),
|
|
99
|
+
description="Enable new answers UI (UN-14411)",
|
|
104
100
|
)
|
|
105
101
|
|
|
106
102
|
enable_html_rendering_un_15131: FeatureFlag = Field(
|
|
@@ -196,9 +196,7 @@ async def download_encoded_images_async(
|
|
|
196
196
|
image_string = f"data:{mime_type};base64," + encoded_string
|
|
197
197
|
base64_encoded_images.append(image_string)
|
|
198
198
|
except Exception as e:
|
|
199
|
-
_LOGGER.warning(
|
|
200
|
-
"Failed to download image %s: %s", im.key, e, exc_info=True
|
|
201
|
-
)
|
|
199
|
+
_LOGGER.warning("Failed to download image %s: %s", im.key, e)
|
|
202
200
|
return base64_encoded_images
|
|
203
201
|
|
|
204
202
|
|
|
@@ -22,6 +22,7 @@ from unique_toolkit._common.referencing import (
|
|
|
22
22
|
)
|
|
23
23
|
from unique_toolkit._common.utils.jinja.render import render_template
|
|
24
24
|
from unique_toolkit.agentic.evaluation.schemas import EvaluationMetricName
|
|
25
|
+
from unique_toolkit.agentic.feature_flags import FeatureFlagNames
|
|
25
26
|
from unique_toolkit.agentic.tools.a2a.response_watcher import SubAgentResponseWatcher
|
|
26
27
|
from unique_toolkit.agentic.tools.a2a.tool._memory import (
|
|
27
28
|
get_sub_agent_short_term_memory_manager,
|
|
@@ -38,7 +39,10 @@ from unique_toolkit.agentic.tools.a2a.tool.config import (
|
|
|
38
39
|
from unique_toolkit.agentic.tools.factory import ToolFactory
|
|
39
40
|
from unique_toolkit.agentic.tools.schemas import ToolCallResponse
|
|
40
41
|
from unique_toolkit.agentic.tools.tool import Tool
|
|
41
|
-
from unique_toolkit.agentic.tools.tool_progress_reporter import
|
|
42
|
+
from unique_toolkit.agentic.tools.tool_progress_reporter import (
|
|
43
|
+
ProgressState,
|
|
44
|
+
ToolProgressReporter,
|
|
45
|
+
)
|
|
42
46
|
from unique_toolkit.app import ChatEvent
|
|
43
47
|
from unique_toolkit.chat.schemas import (
|
|
44
48
|
ChatMessageAssessmentLabel,
|
|
@@ -49,6 +53,7 @@ from unique_toolkit.chat.schemas import (
|
|
|
49
53
|
)
|
|
50
54
|
from unique_toolkit.chat.service import ChatService
|
|
51
55
|
from unique_toolkit.content import ContentChunk, ContentReference
|
|
56
|
+
from unique_toolkit.experimental.resources.feature_flags import is_flag_enabled
|
|
52
57
|
from unique_toolkit.language_model import (
|
|
53
58
|
LanguageModelFunction,
|
|
54
59
|
LanguageModelService,
|
|
@@ -191,6 +196,12 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
191
196
|
timestamp = datetime.now()
|
|
192
197
|
|
|
193
198
|
if self._lock.locked():
|
|
199
|
+
await self._notify_progress(
|
|
200
|
+
tool_call=tool_call,
|
|
201
|
+
message=f"Waiting for another run of `{self.display_name()}` to finish",
|
|
202
|
+
state=ProgressState.STARTED,
|
|
203
|
+
)
|
|
204
|
+
|
|
194
205
|
active_message_log = self._create_or_update_message_log(
|
|
195
206
|
progress_message="_Waiting for another run of this sub agent to finish_",
|
|
196
207
|
active_message_log=active_message_log,
|
|
@@ -204,6 +215,12 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
204
215
|
sequence_number = self._sequence_number
|
|
205
216
|
self._sequence_number += 1
|
|
206
217
|
|
|
218
|
+
await self._notify_progress(
|
|
219
|
+
tool_call=tool_call,
|
|
220
|
+
message=tool_input,
|
|
221
|
+
state=ProgressState.RUNNING,
|
|
222
|
+
)
|
|
223
|
+
|
|
207
224
|
active_message_log = self._create_or_update_message_log(
|
|
208
225
|
progress_message=f"<em>Executing sub agent with input: {tool_input}</em>",
|
|
209
226
|
active_message_log=active_message_log,
|
|
@@ -268,6 +285,12 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
268
285
|
has_refs=has_refs,
|
|
269
286
|
)
|
|
270
287
|
|
|
288
|
+
await self._notify_progress(
|
|
289
|
+
tool_call=tool_call,
|
|
290
|
+
message=tool_input,
|
|
291
|
+
state=ProgressState.FINISHED,
|
|
292
|
+
)
|
|
293
|
+
|
|
271
294
|
# Update message log entry to completed
|
|
272
295
|
active_message_log = self._create_or_update_message_log(
|
|
273
296
|
progress_message=f"<em>Completed sub agent with input: {tool_input}</em>",
|
|
@@ -306,6 +329,11 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
306
329
|
except TimeoutError as e:
|
|
307
330
|
raise e
|
|
308
331
|
except Exception as e:
|
|
332
|
+
await self._notify_progress(
|
|
333
|
+
tool_call=tool_call,
|
|
334
|
+
message="Error while running sub agent",
|
|
335
|
+
state=ProgressState.FAILED,
|
|
336
|
+
)
|
|
309
337
|
active_message_log = self._create_or_update_message_log(
|
|
310
338
|
progress_message="_Error while running sub agent_",
|
|
311
339
|
status=MessageLogStatus.FAILED,
|
|
@@ -398,6 +426,23 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
398
426
|
SubAgentShortTermMemorySchema(chat_id=chat_id)
|
|
399
427
|
)
|
|
400
428
|
|
|
429
|
+
async def _notify_progress(
|
|
430
|
+
self,
|
|
431
|
+
tool_call: LanguageModelFunction,
|
|
432
|
+
message: str,
|
|
433
|
+
state: ProgressState,
|
|
434
|
+
) -> None:
|
|
435
|
+
if self._tool_progress_reporter is not None and not await is_flag_enabled(
|
|
436
|
+
FeatureFlagNames.enable_new_answers_ui_un_14411,
|
|
437
|
+
company_id=self._company_id or "",
|
|
438
|
+
):
|
|
439
|
+
await self._tool_progress_reporter.notify_from_tool_call(
|
|
440
|
+
tool_call=tool_call,
|
|
441
|
+
name=self._display_name,
|
|
442
|
+
message=message,
|
|
443
|
+
state=state,
|
|
444
|
+
)
|
|
445
|
+
|
|
401
446
|
def _create_or_update_message_log(
|
|
402
447
|
self,
|
|
403
448
|
*,
|
|
@@ -466,6 +511,11 @@ class SubAgentTool(Tool[SubAgentToolConfig]):
|
|
|
466
511
|
wait_for_invocations=True,
|
|
467
512
|
)
|
|
468
513
|
except TimeoutError as e:
|
|
514
|
+
await self._notify_progress(
|
|
515
|
+
tool_call=tool_call,
|
|
516
|
+
message="Timeout while waiting for response from sub agent.",
|
|
517
|
+
state=ProgressState.FAILED,
|
|
518
|
+
)
|
|
469
519
|
active_message_log = self._create_or_update_message_log(
|
|
470
520
|
progress_message="_Timeout while waiting for response from sub agent_",
|
|
471
521
|
status=MessageLogStatus.FAILED,
|
|
@@ -4,21 +4,24 @@ import json
|
|
|
4
4
|
import logging
|
|
5
5
|
import mimetypes
|
|
6
6
|
import uuid
|
|
7
|
-
from typing import Any
|
|
7
|
+
from typing import Any, Dict
|
|
8
8
|
|
|
9
9
|
import unique_sdk
|
|
10
|
-
from pydantic import ValidationError
|
|
11
10
|
|
|
12
11
|
from unique_toolkit.agentic.evaluation.schemas import EvaluationMetricName
|
|
12
|
+
from unique_toolkit.agentic.feature_flags import FeatureFlagNames
|
|
13
13
|
from unique_toolkit.agentic.tools.mcp.models import MCPToolConfig
|
|
14
14
|
from unique_toolkit.agentic.tools.schemas import ToolCallResponse
|
|
15
15
|
from unique_toolkit.agentic.tools.tool import Tool
|
|
16
|
-
from unique_toolkit.agentic.tools.tool_progress_reporter import
|
|
16
|
+
from unique_toolkit.agentic.tools.tool_progress_reporter import (
|
|
17
|
+
ProgressState,
|
|
18
|
+
ToolProgressReporter,
|
|
19
|
+
)
|
|
17
20
|
from unique_toolkit.app.schemas import ChatEvent, McpServer, McpTool
|
|
18
21
|
from unique_toolkit.chat.schemas import MessageLog, MessageLogStatus
|
|
19
22
|
from unique_toolkit.chat.service import ChatService
|
|
20
23
|
from unique_toolkit.content.functions import upload_content_from_bytes
|
|
21
|
-
from unique_toolkit.
|
|
24
|
+
from unique_toolkit.experimental.resources.feature_flags import is_flag_enabled
|
|
22
25
|
from unique_toolkit.language_model import LanguageModelService
|
|
23
26
|
from unique_toolkit.language_model.schemas import (
|
|
24
27
|
LanguageModelFunction,
|
|
@@ -27,8 +30,6 @@ from unique_toolkit.language_model.schemas import (
|
|
|
27
30
|
|
|
28
31
|
logger = logging.getLogger(__name__)
|
|
29
32
|
|
|
30
|
-
REFERENCE_META_KEY = "unique.app/reference"
|
|
31
|
-
|
|
32
33
|
|
|
33
34
|
class MCPToolWrapper(Tool[MCPToolConfig]):
|
|
34
35
|
"""Wrapper class for MCP tools that implements the Tool interface"""
|
|
@@ -71,7 +72,7 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
|
|
|
71
72
|
parameters=self._mcp_tool.input_schema,
|
|
72
73
|
)
|
|
73
74
|
|
|
74
|
-
def _json_schema_to_python_type(self, schema:
|
|
75
|
+
def _json_schema_to_python_type(self, schema: Dict[str, Any]) -> type:
|
|
75
76
|
"""Convert JSON schema type to Python type"""
|
|
76
77
|
json_type = schema.get("type", "string")
|
|
77
78
|
|
|
@@ -132,6 +133,18 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
|
|
|
132
133
|
active_message_log=active_message_log,
|
|
133
134
|
)
|
|
134
135
|
|
|
136
|
+
# Notify progress if reporter is available
|
|
137
|
+
if self._tool_progress_reporter and not await is_flag_enabled(
|
|
138
|
+
FeatureFlagNames.enable_new_answers_ui_un_14411,
|
|
139
|
+
company_id=self._event.company_id,
|
|
140
|
+
):
|
|
141
|
+
await self._tool_progress_reporter.notify_from_tool_call(
|
|
142
|
+
tool_call=tool_call,
|
|
143
|
+
name=f"**{self.display_name()}**",
|
|
144
|
+
message=f"Executing MCP tool: {self.display_name()}",
|
|
145
|
+
state=ProgressState.RUNNING,
|
|
146
|
+
)
|
|
147
|
+
|
|
135
148
|
try:
|
|
136
149
|
# Robust argument extraction and validation
|
|
137
150
|
arguments = self._extract_and_validate_arguments(tool_call)
|
|
@@ -139,14 +152,9 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
|
|
|
139
152
|
# Use SDK to call the public API
|
|
140
153
|
result = await self._call_mcp_tool_via_sdk(arguments)
|
|
141
154
|
|
|
142
|
-
content_chunks, references = self._extract_structured_references(result)
|
|
143
155
|
content_str, image_data_urls = await asyncio.to_thread(
|
|
144
156
|
self._process_mcp_result, result
|
|
145
157
|
)
|
|
146
|
-
if content_chunks:
|
|
147
|
-
# Structured references already carry the text; keep any
|
|
148
|
-
# extracted images but drop the redundant flat text.
|
|
149
|
-
content_str = ""
|
|
150
158
|
|
|
151
159
|
# TODO: Why result here not applied directly to the body of the tool_response? like so how does it know the results in the history?
|
|
152
160
|
tool_response = ToolCallResponse(
|
|
@@ -159,16 +167,26 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
|
|
|
159
167
|
},
|
|
160
168
|
error_message="",
|
|
161
169
|
content=content_str,
|
|
162
|
-
content_chunks=content_chunks or None,
|
|
163
170
|
image_data_urls=image_data_urls,
|
|
164
171
|
)
|
|
165
172
|
|
|
173
|
+
# Notify completion
|
|
174
|
+
if self._tool_progress_reporter and not await is_flag_enabled(
|
|
175
|
+
FeatureFlagNames.enable_new_answers_ui_un_14411,
|
|
176
|
+
company_id=self._event.company_id,
|
|
177
|
+
):
|
|
178
|
+
await self._tool_progress_reporter.notify_from_tool_call(
|
|
179
|
+
tool_call=tool_call,
|
|
180
|
+
name=f"**{self.display_name()}**",
|
|
181
|
+
message=f"MCP tool completed: {self.display_name()}",
|
|
182
|
+
state=ProgressState.FINISHED,
|
|
183
|
+
)
|
|
184
|
+
|
|
166
185
|
# Update message log entry to completed
|
|
167
186
|
active_message_log = self._create_or_update_message_log(
|
|
168
187
|
progress_message="_Completed MCP tool_",
|
|
169
188
|
status=MessageLogStatus.COMPLETED,
|
|
170
189
|
active_message_log=active_message_log,
|
|
171
|
-
references=references,
|
|
172
190
|
)
|
|
173
191
|
|
|
174
192
|
return tool_response
|
|
@@ -176,6 +194,18 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
|
|
|
176
194
|
except Exception as e:
|
|
177
195
|
self.logger.error(f"Error executing MCP tool {self.name}: {e}")
|
|
178
196
|
|
|
197
|
+
# Notify failure
|
|
198
|
+
if self._tool_progress_reporter and not await is_flag_enabled(
|
|
199
|
+
FeatureFlagNames.enable_new_answers_ui_un_14411,
|
|
200
|
+
company_id=self._event.company_id,
|
|
201
|
+
):
|
|
202
|
+
await self._tool_progress_reporter.notify_from_tool_call(
|
|
203
|
+
tool_call=tool_call,
|
|
204
|
+
name=f"**{self.display_name()}**",
|
|
205
|
+
message=f"MCP tool failed: {str(e)}",
|
|
206
|
+
state=ProgressState.FAILED,
|
|
207
|
+
)
|
|
208
|
+
|
|
179
209
|
# Update message log entry to failed
|
|
180
210
|
active_message_log = self._create_or_update_message_log(
|
|
181
211
|
progress_message="_Failed executing MCP tool_",
|
|
@@ -200,19 +230,17 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
|
|
|
200
230
|
progress_message: str | None = None,
|
|
201
231
|
status: MessageLogStatus = MessageLogStatus.RUNNING,
|
|
202
232
|
active_message_log: MessageLog | None = None,
|
|
203
|
-
references: list[ContentReference] | None = None,
|
|
204
233
|
) -> MessageLog | None:
|
|
205
234
|
return self._message_step_logger.create_or_update_message_log(
|
|
206
235
|
active_message_log=active_message_log,
|
|
207
236
|
header=self.display_name(),
|
|
208
237
|
progress_message=progress_message,
|
|
209
238
|
status=status,
|
|
210
|
-
references=references or [],
|
|
211
239
|
)
|
|
212
240
|
|
|
213
241
|
def _extract_and_validate_arguments(
|
|
214
242
|
self, tool_call: LanguageModelFunction
|
|
215
|
-
) ->
|
|
243
|
+
) -> Dict[str, Any]:
|
|
216
244
|
"""
|
|
217
245
|
Extract and validate arguments from tool call, handling various formats robustly.
|
|
218
246
|
|
|
@@ -259,39 +287,7 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
|
|
|
259
287
|
f"Unexpected arguments type for MCP tool {self.name}: {type(raw_arguments)}"
|
|
260
288
|
)
|
|
261
289
|
|
|
262
|
-
def
|
|
263
|
-
self, result: dict[str, Any]
|
|
264
|
-
) -> tuple[list[ContentChunk], list[ContentReference]]:
|
|
265
|
-
"""Opt-in: content items with valid ``unique.app/reference`` + chunk ``_meta``."""
|
|
266
|
-
chunks: list[ContentChunk] = []
|
|
267
|
-
references: list[ContentReference] = []
|
|
268
|
-
content_items = self._extract_content_items(result)
|
|
269
|
-
for item in content_items:
|
|
270
|
-
if not isinstance(item, dict) or item.get("type") != "text":
|
|
271
|
-
continue
|
|
272
|
-
meta = item.get("_meta")
|
|
273
|
-
if not isinstance(meta, dict):
|
|
274
|
-
continue
|
|
275
|
-
ref_payload = meta.get(REFERENCE_META_KEY)
|
|
276
|
-
if not isinstance(ref_payload, dict):
|
|
277
|
-
continue
|
|
278
|
-
try:
|
|
279
|
-
reference = ContentReference.model_validate(ref_payload)
|
|
280
|
-
chunk = ContentChunk.model_validate(
|
|
281
|
-
{k: v for k, v in meta.items() if k != REFERENCE_META_KEY}
|
|
282
|
-
)
|
|
283
|
-
except ValidationError:
|
|
284
|
-
self.logger.warning(
|
|
285
|
-
"MCP tool %s: ignoring invalid %s metadata",
|
|
286
|
-
self.name,
|
|
287
|
-
REFERENCE_META_KEY,
|
|
288
|
-
)
|
|
289
|
-
continue
|
|
290
|
-
references.append(reference)
|
|
291
|
-
chunks.append(chunk)
|
|
292
|
-
return chunks, references
|
|
293
|
-
|
|
294
|
-
def _process_mcp_result(self, result: dict[str, Any]) -> tuple[str, list[str]]:
|
|
290
|
+
def _process_mcp_result(self, result: Dict[str, Any]) -> tuple[str, list[str]]:
|
|
295
291
|
"""Parse MCP result content array, upload images, return content string and data URLs."""
|
|
296
292
|
content_items = self._extract_content_items(result)
|
|
297
293
|
if not content_items:
|
|
@@ -331,7 +327,7 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
|
|
|
331
327
|
content_str = json.dumps(result)
|
|
332
328
|
return content_str, image_data_urls
|
|
333
329
|
|
|
334
|
-
def _extract_content_items(self, result:
|
|
330
|
+
def _extract_content_items(self, result: Dict[str, Any]) -> list[Any]:
|
|
335
331
|
"""Extract content array from MCP result (handles various response shapes)."""
|
|
336
332
|
if "content" in result and isinstance(result["content"], list):
|
|
337
333
|
return result["content"]
|
|
@@ -382,7 +378,7 @@ class MCPToolWrapper(Tool[MCPToolConfig]):
|
|
|
382
378
|
|
|
383
379
|
return data_url, content_id
|
|
384
380
|
|
|
385
|
-
async def _call_mcp_tool_via_sdk(self, arguments:
|
|
381
|
+
async def _call_mcp_tool_via_sdk(self, arguments: Dict[str, Any]) -> Dict[str, Any]:
|
|
386
382
|
"""Call MCP tool via SDK to public API"""
|
|
387
383
|
try:
|
|
388
384
|
self.logger.info(
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from mimetypes import guess_type
|
|
3
|
+
|
|
4
|
+
from openai.types.responses.response_output_text import AnnotationContainerFileCitation
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
from unique_toolkit import ChatService
|
|
8
|
+
from unique_toolkit._common.utils.files import FileMimeType, ImageMimeType
|
|
9
|
+
from unique_toolkit.content.schemas import Content
|
|
10
|
+
|
|
11
|
+
_CODE_EXECUTION_ARTIFACT_METADATA_KEY: str = "codeExecutionArtifactMetadata"
|
|
12
|
+
|
|
13
|
+
_LOGGER = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class CodeExecutionArtifactMetadata(BaseModel):
|
|
17
|
+
container_id: str
|
|
18
|
+
file_id: str
|
|
19
|
+
filepath: str
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _kb_safe_mime(mime: str) -> str:
|
|
23
|
+
"""Return a MIME type the Unique KB will accept.
|
|
24
|
+
|
|
25
|
+
Membership is defined by ``FileMimeType`` and ``ImageMimeType`` in
|
|
26
|
+
``unique_toolkit._common.utils.files`` (same catalog as path-based helpers
|
|
27
|
+
like ``FileMimeType.is_valid_mime``, but here we already have a resolved
|
|
28
|
+
MIME string from ``mimetypes.guess_type``, so we use StrEnum value lookup
|
|
29
|
+
instead of re-parsing a path).
|
|
30
|
+
|
|
31
|
+
The KB GraphQL API rejects many code-file MIME types (e.g. ``text/x-python``
|
|
32
|
+
for ``.py`` files). Anything not in those enums is coerced to
|
|
33
|
+
``text/plain`` so the file can be stored and downloaded without changing
|
|
34
|
+
its bytes.
|
|
35
|
+
|
|
36
|
+
Other ``image/*`` subtypes (e.g. ``image/jpg``) still pass through unchanged.
|
|
37
|
+
"""
|
|
38
|
+
try:
|
|
39
|
+
FileMimeType(mime)
|
|
40
|
+
return mime
|
|
41
|
+
except ValueError:
|
|
42
|
+
pass
|
|
43
|
+
try:
|
|
44
|
+
ImageMimeType(mime)
|
|
45
|
+
return mime
|
|
46
|
+
except ValueError:
|
|
47
|
+
pass
|
|
48
|
+
if mime.startswith("image/"):
|
|
49
|
+
return mime
|
|
50
|
+
return "text/plain"
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
async def save_code_execution_artifact(
|
|
54
|
+
chat_service: ChatService,
|
|
55
|
+
file: AnnotationContainerFileCitation,
|
|
56
|
+
file_bytes: bytes,
|
|
57
|
+
) -> Content:
|
|
58
|
+
raw_mime = guess_type(file.filename)[0] or "text/plain"
|
|
59
|
+
mime = _kb_safe_mime(raw_mime)
|
|
60
|
+
|
|
61
|
+
if mime != raw_mime:
|
|
62
|
+
_LOGGER.info(
|
|
63
|
+
"MIME type '%s' is not supported by the Unique KB; "
|
|
64
|
+
"uploading '%s' as 'text/plain' so the file can be stored and downloaded.",
|
|
65
|
+
raw_mime,
|
|
66
|
+
file.filename,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
_LOGGER.info(
|
|
70
|
+
"Uploading '%s' to knowledge base (%d bytes, mime type %s)",
|
|
71
|
+
file.filename,
|
|
72
|
+
len(file_bytes),
|
|
73
|
+
mime,
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
return await chat_service.upload_to_chat_from_bytes_async(
|
|
77
|
+
content=file_bytes,
|
|
78
|
+
content_name=file.filename,
|
|
79
|
+
mime_type=mime,
|
|
80
|
+
skip_ingestion=True,
|
|
81
|
+
hide_in_chat=True,
|
|
82
|
+
metadata={
|
|
83
|
+
_CODE_EXECUTION_ARTIFACT_METADATA_KEY: CodeExecutionArtifactMetadata(
|
|
84
|
+
container_id=file.container_id,
|
|
85
|
+
file_id=file.file_id,
|
|
86
|
+
filepath=f"/mnt/data/{file.filename}",
|
|
87
|
+
).model_dump()
|
|
88
|
+
},
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def load_code_execution_metadata(
|
|
93
|
+
content: Content,
|
|
94
|
+
) -> CodeExecutionArtifactMetadata | None:
|
|
95
|
+
if (
|
|
96
|
+
content.metadata is None
|
|
97
|
+
or _CODE_EXECUTION_ARTIFACT_METADATA_KEY not in content.metadata
|
|
98
|
+
):
|
|
99
|
+
return None
|
|
100
|
+
|
|
101
|
+
return CodeExecutionArtifactMetadata.model_validate(
|
|
102
|
+
content.metadata[_CODE_EXECUTION_ARTIFACT_METADATA_KEY]
|
|
103
|
+
)
|
|
@@ -117,15 +117,6 @@ class DisplayCodeInterpreterFilesPostProcessorConfig(BaseModel):
|
|
|
117
117
|
"Applies per SDK attempt. The OpenAI SDK default of 600s is too generous "
|
|
118
118
|
"for small generated files; a shorter timeout lets us retry sooner.",
|
|
119
119
|
)
|
|
120
|
-
attach_office_preview: SkipJsonSchema[bool] = Field(
|
|
121
|
-
default=False,
|
|
122
|
-
description=(
|
|
123
|
-
"When True, convert Word/PowerPoint/Excel artifacts to a sibling "
|
|
124
|
-
"PDF and attach it as the chat side-panel preview. Default False "
|
|
125
|
-
"keeps the historical bytes-only upload. Conversion is best-effort "
|
|
126
|
-
"and falls back to the original file."
|
|
127
|
-
),
|
|
128
|
-
)
|
|
129
120
|
|
|
130
121
|
|
|
131
122
|
class _ContentInfo(NamedTuple):
|
|
@@ -771,7 +762,6 @@ class DisplayCodeInterpreterFilesPostProcessor(
|
|
|
771
762
|
chat_service=self._chat_service,
|
|
772
763
|
file=container_file,
|
|
773
764
|
file_bytes=file_bytes,
|
|
774
|
-
attach_office_preview=self._config.attach_office_preview,
|
|
775
765
|
)
|
|
776
766
|
upload_ms = (time.monotonic() - upload_t0) * 1000
|
|
777
767
|
if upload_ms > 2000:
|
{unique_toolkit-2026.36.0 → unique_toolkit-2026.36.0.dev0}/unique_toolkit/agentic_table/__init__.py
RENAMED
|
@@ -14,8 +14,6 @@ from .schemas import (
|
|
|
14
14
|
AgreementStatus,
|
|
15
15
|
ArtifactType,
|
|
16
16
|
CreatedMagicTableSheet,
|
|
17
|
-
LibrarySheetRowVerifiedMetadata,
|
|
18
|
-
LibrarySheetRowVerifiedRow,
|
|
19
17
|
LogEntry,
|
|
20
18
|
MagicTableAction,
|
|
21
19
|
MagicTableAddMetadataPayload,
|
|
@@ -28,13 +26,11 @@ from .schemas import (
|
|
|
28
26
|
MagicTableGenerateArtifactPayload,
|
|
29
27
|
MagicTableLibrarySheetRowVerifiedPayload,
|
|
30
28
|
MagicTableRerunRowPayload,
|
|
31
|
-
MagicTableRerunRowsPayload,
|
|
32
29
|
MagicTableSheet,
|
|
33
30
|
MagicTableSheetCompletedPayload,
|
|
34
31
|
MagicTableSheetCreatedPayload,
|
|
35
32
|
MagicTableUpdateCellPayload,
|
|
36
33
|
RerunRowMetadata,
|
|
37
|
-
RerunRowsMetadata,
|
|
38
34
|
RowMetadataEntry,
|
|
39
35
|
RowMetadataEntryInput,
|
|
40
36
|
SelectionMethod,
|
|
@@ -78,15 +74,11 @@ __all__ = [
|
|
|
78
74
|
"MagicTableGenerateArtifactPayload",
|
|
79
75
|
"MagicTableLibrarySheetRowVerifiedPayload",
|
|
80
76
|
"MagicTableRerunRowPayload",
|
|
81
|
-
"MagicTableRerunRowsPayload",
|
|
82
77
|
"MagicTableSheet",
|
|
83
78
|
"MagicTableSheetCompletedPayload",
|
|
84
79
|
"MagicTableSheetCreatedPayload",
|
|
85
80
|
"MagicTableUpdateCellPayload",
|
|
86
|
-
"LibrarySheetRowVerifiedMetadata",
|
|
87
|
-
"LibrarySheetRowVerifiedRow",
|
|
88
81
|
"RerunRowMetadata",
|
|
89
|
-
"RerunRowsMetadata",
|
|
90
82
|
"RowMetadataEntry",
|
|
91
83
|
"RowMetadataEntryInput",
|
|
92
84
|
"RowVerificationStatus",
|