unique-toolkit 2026.30.0.dev19__tar.gz → 2026.30.0.dev21__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/PKG-INFO +2 -2
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/pyproject.toml +2 -2
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +81 -11
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/evaluation_manager.py +17 -0
- unique_toolkit-2026.30.0.dev21/unique_toolkit/agentic/evaluation/exception.py +23 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/hallucination/utils.py +36 -4
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/schemas.py +2 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +71 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/loop_runner/__init__.py +2 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +2 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +5 -1
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/loop_runner/base.py +15 -1
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +32 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +23 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +41 -6
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_files.py +57 -7
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/builder.py +17 -1
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/config.py +13 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/service.py +3 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/schemas.py +5 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +16 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +1 -5
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +1 -5
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/language_model/__init__.py +4 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/language_model/functions.py +8 -0
- unique_toolkit-2026.30.0.dev21/unique_toolkit/language_model/invocation_stats.py +70 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/language_model/schemas.py +151 -2
- unique_toolkit-2026.30.0.dev19/unique_toolkit/agentic/evaluation/exception.py +0 -5
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/README.md +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/metadata_filter_scope.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/tests/test_hallucination_external_context.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/history_manager/settings.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/message_log_order.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/reference_manager/tests/test_external_context.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/ask_user_tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/ask_user_tool/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/ask_user_tool/tool.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/names.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_container.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_memory.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/run_context.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/agentic_table/synthetic_chat_event.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/app/feature_flags.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/app/find_env_file.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/chat/deprecated/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/README.md +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/_internal/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/_base.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/content_tree/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/internal_search/base/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/identity/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/feature_flags/README.md +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/feature_flags/_graphql_client.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/feature_flags/_ttl_cache.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/feature_flags/client.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/feature_flags/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/feature_flags/settings.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/group/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/group/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/user/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/resources/user/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/experimental/testing/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/language_model/settings.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/monitoring/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/monitoring/gunicorn.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/monitoring/middleware.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/monitoring/registry.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/services/chat_service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/services/factory.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-2026.30.0.dev19 → unique_toolkit-2026.30.0.dev21}/unique_toolkit/test_utilities/events.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: unique-toolkit
|
|
3
|
-
Version: 2026.30.0.
|
|
3
|
+
Version: 2026.30.0.dev21
|
|
4
4
|
Summary:
|
|
5
5
|
Author: Cedric Klinkert, Martin Fadler, Sadique Sheik, Fabian Schläpfer, Pascal Hauri, Ejiroghene Oki-Peter, Rami Azouz, Ricardo Visini, Sanzio Monti
|
|
6
6
|
Author-email: Cedric Klinkert <cedric.klinkert@unique.ch>, Martin Fadler <martin.fadler@unique.ch>, Sadique Sheik <sadique@unique.ch>, Fabian Schläpfer <fabian@unique.ch>, Pascal Hauri <pascal@unique.ch>, Ejiroghene Oki-Peter <oki-peter.ejiroghene@unique.ai>, Rami Azouz <rami.ext@unique.ch>, Ricardo Visini <ricardo.visini@unique.ch>, Sanzio Monti <sanzio.monti@unique.ai>
|
|
@@ -16,7 +16,7 @@ Requires-Dist: sseclient>=0.0.27,<0.0.28
|
|
|
16
16
|
Requires-Dist: openai>=1.105.0,<3
|
|
17
17
|
Requires-Dist: platformdirs>=4.0.0,<5
|
|
18
18
|
Requires-Dist: pillow>=12.1.1
|
|
19
|
-
Requires-Dist: unique-sdk>=2026.30.0.
|
|
19
|
+
Requires-Dist: unique-sdk>=2026.30.0.dev9,<2026.30.0rc0
|
|
20
20
|
Requires-Dist: jambo>=0.1.2,<0.2
|
|
21
21
|
Requires-Dist: jinja2>=3.1.6,<4
|
|
22
22
|
Requires-Dist: docxtpl>=0.20.1,<0.21
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "unique_toolkit"
|
|
3
|
-
version = "2026.30.0.
|
|
3
|
+
version = "2026.30.0.dev21"
|
|
4
4
|
description = ""
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -28,7 +28,7 @@ dependencies = [
|
|
|
28
28
|
"openai>=1.105.0,<3",
|
|
29
29
|
"platformdirs>=4.0.0,<5",
|
|
30
30
|
"pillow>=12.1.1",
|
|
31
|
-
"unique-sdk>=2026.30.0.
|
|
31
|
+
"unique-sdk>=2026.30.0.dev9,<2026.30.0rc0",
|
|
32
32
|
"jambo>=0.1.2,<0.2",
|
|
33
33
|
"jinja2>=3.1.6,<4",
|
|
34
34
|
"docxtpl>=0.20.1,<0.21",
|
|
@@ -32,6 +32,9 @@ from unique_toolkit.language_model.infos import (
|
|
|
32
32
|
LanguageModelInfo,
|
|
33
33
|
ModelCapabilities,
|
|
34
34
|
)
|
|
35
|
+
from unique_toolkit.language_model.invocation_stats import (
|
|
36
|
+
LanguageModelInvocationStats,
|
|
37
|
+
)
|
|
35
38
|
from unique_toolkit.language_model.schemas import (
|
|
36
39
|
LanguageModelMessages,
|
|
37
40
|
LanguageModelSystemMessage,
|
|
@@ -145,6 +148,10 @@ class ContextRelevancyEvaluator:
|
|
|
145
148
|
# Handle regular output
|
|
146
149
|
return await self._handle_regular_output(input, config)
|
|
147
150
|
|
|
151
|
+
except EvaluatorException:
|
|
152
|
+
# Already carries whatever invocation_stats were captured before
|
|
153
|
+
# the failure -- don't re-wrap it and lose them.
|
|
154
|
+
raise
|
|
148
155
|
except Exception as e:
|
|
149
156
|
error_message = (
|
|
150
157
|
"Unknown error occurred during context relevancy metric analysis"
|
|
@@ -172,21 +179,49 @@ class ContextRelevancyEvaluator:
|
|
|
172
179
|
other_options=config.additional_llm_options,
|
|
173
180
|
)
|
|
174
181
|
|
|
182
|
+
# Captured as soon as the (billable) LLM call returns, so a validation
|
|
183
|
+
# failure below can still report it instead of losing it.
|
|
184
|
+
invocation_stats = (
|
|
185
|
+
[
|
|
186
|
+
LanguageModelInvocationStats.from_usage(
|
|
187
|
+
config.language_model.name,
|
|
188
|
+
result.usage,
|
|
189
|
+
source="context_relevancy",
|
|
190
|
+
)
|
|
191
|
+
]
|
|
192
|
+
if result.usage is not None
|
|
193
|
+
else []
|
|
194
|
+
)
|
|
195
|
+
|
|
175
196
|
try:
|
|
176
197
|
result_content = EvaluationSchemaStructuredOutput.model_validate(
|
|
177
198
|
result.choices[0].message.parsed
|
|
178
199
|
)
|
|
200
|
+
evaluation_result = parse_eval_metric_result_structured_output(
|
|
201
|
+
result_content, EvaluationMetricName.CONTEXT_RELEVANCY
|
|
202
|
+
)
|
|
179
203
|
except ValidationError as e:
|
|
180
204
|
error_message = "Error occurred during structured output validation of the context relevancy evaluation."
|
|
181
205
|
raise EvaluatorException(
|
|
182
206
|
error_message=error_message,
|
|
183
207
|
user_message=error_message,
|
|
184
208
|
exception=e,
|
|
209
|
+
invocation_stats=invocation_stats,
|
|
210
|
+
)
|
|
211
|
+
except Exception as e:
|
|
212
|
+
# Catches anything else reading the response (e.g. an empty
|
|
213
|
+
# `choices` list) -- must still carry invocation_stats, not just
|
|
214
|
+
# the validation-specific failure above.
|
|
215
|
+
error_message = "Error occurred while reading the structured output response for context relevancy evaluation."
|
|
216
|
+
raise EvaluatorException(
|
|
217
|
+
error_message=f"{error_message}: {e}",
|
|
218
|
+
user_message=error_message,
|
|
219
|
+
exception=e,
|
|
220
|
+
invocation_stats=invocation_stats,
|
|
185
221
|
)
|
|
186
222
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
)
|
|
223
|
+
evaluation_result.invocation_stats = invocation_stats
|
|
224
|
+
return evaluation_result
|
|
190
225
|
|
|
191
226
|
async def _handle_regular_output(
|
|
192
227
|
self,
|
|
@@ -201,17 +236,52 @@ class ContextRelevancyEvaluator:
|
|
|
201
236
|
other_options=config.additional_llm_options,
|
|
202
237
|
)
|
|
203
238
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
239
|
+
# Captured as soon as the (billable) LLM call returns, so a failure
|
|
240
|
+
# below can still report it instead of losing it.
|
|
241
|
+
invocation_stats = (
|
|
242
|
+
[
|
|
243
|
+
LanguageModelInvocationStats.from_usage(
|
|
244
|
+
config.language_model.name,
|
|
245
|
+
result.usage,
|
|
246
|
+
source="context_relevancy",
|
|
247
|
+
)
|
|
248
|
+
]
|
|
249
|
+
if result.usage is not None
|
|
250
|
+
else []
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
try:
|
|
254
|
+
result_content = result.choices[0].message.content
|
|
255
|
+
if not result_content or not isinstance(result_content, str):
|
|
256
|
+
error_message = "Context relevancy evaluation did not return a result."
|
|
257
|
+
raise EvaluatorException(
|
|
258
|
+
error_message=error_message,
|
|
259
|
+
user_message=error_message,
|
|
260
|
+
invocation_stats=invocation_stats,
|
|
261
|
+
)
|
|
262
|
+
evaluation_result = parse_eval_metric_result(
|
|
263
|
+
result_content, EvaluationMetricName.CONTEXT_RELEVANCY
|
|
264
|
+
)
|
|
265
|
+
except EvaluatorException as e:
|
|
266
|
+
# Covers both the raise above and parse_eval_metric_result's own
|
|
267
|
+
# EvaluatorException (which has no invocation_stats, since it has
|
|
268
|
+
# no usage context) -- attach ours if it didn't already carry
|
|
269
|
+
# stats, instead of letting it propagate stats-less.
|
|
270
|
+
if not e.invocation_stats:
|
|
271
|
+
e.invocation_stats = invocation_stats
|
|
272
|
+
raise
|
|
273
|
+
except Exception as e:
|
|
274
|
+
# Catches anything else reading the response (e.g. an empty
|
|
275
|
+
# `choices` list).
|
|
276
|
+
error_message = "Error occurred while reading the context relevancy evaluation response."
|
|
207
277
|
raise EvaluatorException(
|
|
208
|
-
error_message=error_message,
|
|
278
|
+
error_message=f"{error_message}: {e}",
|
|
209
279
|
user_message=error_message,
|
|
280
|
+
exception=e,
|
|
281
|
+
invocation_stats=invocation_stats,
|
|
210
282
|
)
|
|
211
|
-
|
|
212
|
-
return
|
|
213
|
-
result_content, EvaluationMetricName.CONTEXT_RELEVANCY
|
|
214
|
-
)
|
|
283
|
+
evaluation_result.invocation_stats = invocation_stats
|
|
284
|
+
return evaluation_result
|
|
215
285
|
|
|
216
286
|
def _compose_msgs(
|
|
217
287
|
self,
|
|
@@ -7,6 +7,7 @@ from unique_toolkit._common.execution import (
|
|
|
7
7
|
Result,
|
|
8
8
|
SafeTaskExecutor,
|
|
9
9
|
)
|
|
10
|
+
from unique_toolkit.agentic.evaluation.exception import EvaluatorException
|
|
10
11
|
from unique_toolkit.agentic.evaluation.schemas import (
|
|
11
12
|
EvaluationAssessmentMessage,
|
|
12
13
|
EvaluationMetricName,
|
|
@@ -17,6 +18,9 @@ from unique_toolkit.chat.schemas import (
|
|
|
17
18
|
ChatMessageAssessmentType,
|
|
18
19
|
)
|
|
19
20
|
from unique_toolkit.chat.service import ChatService
|
|
21
|
+
from unique_toolkit.language_model.invocation_stats import (
|
|
22
|
+
LanguageModelInvocationStats,
|
|
23
|
+
)
|
|
20
24
|
from unique_toolkit.language_model.schemas import (
|
|
21
25
|
LanguageModelStreamResponse,
|
|
22
26
|
)
|
|
@@ -88,6 +92,7 @@ class EvaluationManager:
|
|
|
88
92
|
self._evaluations: dict[EvaluationMetricName, Evaluation] = {}
|
|
89
93
|
self._evaluation_passed: bool = True
|
|
90
94
|
self._execution_times: dict[str, float] = {}
|
|
95
|
+
self._invocation_stats: list[LanguageModelInvocationStats] = []
|
|
91
96
|
|
|
92
97
|
def add_evaluation(self, evaluation: Evaluation):
|
|
93
98
|
self._evaluations[evaluation.get_name()] = evaluation
|
|
@@ -102,6 +107,7 @@ class EvaluationManager:
|
|
|
102
107
|
assistant_message_id: str,
|
|
103
108
|
) -> list[EvaluationMetricResult]:
|
|
104
109
|
self._execution_times = {}
|
|
110
|
+
self._invocation_stats = []
|
|
105
111
|
|
|
106
112
|
task_executor = SafeTaskExecutor(
|
|
107
113
|
logger=self._logger,
|
|
@@ -125,6 +131,7 @@ class EvaluationManager:
|
|
|
125
131
|
)
|
|
126
132
|
if not unpacked_evaluation_result.is_positive:
|
|
127
133
|
self._evaluation_passed = False
|
|
134
|
+
self._invocation_stats.extend(unpacked_evaluation_result.invocation_stats)
|
|
128
135
|
evaluation_results_unpacked.append(unpacked_evaluation_result)
|
|
129
136
|
|
|
130
137
|
for evaluation_name, evaluation_result in zip(
|
|
@@ -141,6 +148,10 @@ class EvaluationManager:
|
|
|
141
148
|
def get_execution_times(self) -> dict[str, float]:
|
|
142
149
|
return self._execution_times.copy()
|
|
143
150
|
|
|
151
|
+
def get_invocation_stats(self) -> list[LanguageModelInvocationStats]:
|
|
152
|
+
"""Per-LLM-call stats from every evaluation that made its own LLM call."""
|
|
153
|
+
return list(self._invocation_stats)
|
|
154
|
+
|
|
144
155
|
async def execute_evaluation_call(
|
|
145
156
|
self,
|
|
146
157
|
evaluation_name: EvaluationMetricName,
|
|
@@ -178,12 +189,18 @@ class EvaluationManager:
|
|
|
178
189
|
evaluation_name: EvaluationMetricName,
|
|
179
190
|
) -> EvaluationMetricResult:
|
|
180
191
|
if not result.success:
|
|
192
|
+
invocation_stats = (
|
|
193
|
+
result.exception.invocation_stats
|
|
194
|
+
if isinstance(result.exception, EvaluatorException)
|
|
195
|
+
else []
|
|
196
|
+
)
|
|
181
197
|
return EvaluationMetricResult(
|
|
182
198
|
name=evaluation_name,
|
|
183
199
|
is_positive=True,
|
|
184
200
|
value="RED",
|
|
185
201
|
reason=str(result.exception),
|
|
186
202
|
error=Exception("Evaluation result is not successful"),
|
|
203
|
+
invocation_stats=invocation_stats,
|
|
187
204
|
)
|
|
188
205
|
return result.unpack()
|
|
189
206
|
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from unique_toolkit._common.exception import CommonException
|
|
2
|
+
from unique_toolkit.language_model.invocation_stats import LanguageModelInvocationStats
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class EvaluatorException(CommonException):
|
|
6
|
+
def __init__(
|
|
7
|
+
self,
|
|
8
|
+
user_message: str,
|
|
9
|
+
error_message: str,
|
|
10
|
+
exception: Exception | None = None,
|
|
11
|
+
invocation_stats: list[LanguageModelInvocationStats] | None = None,
|
|
12
|
+
) -> None:
|
|
13
|
+
super().__init__(
|
|
14
|
+
user_message=user_message,
|
|
15
|
+
error_message=error_message,
|
|
16
|
+
exception=exception,
|
|
17
|
+
)
|
|
18
|
+
# Carries whatever usage was already captured before the failure, so a
|
|
19
|
+
# successful (billable) LLM call isn't silently dropped from the report
|
|
20
|
+
# just because something after it (parsing, validation) raised.
|
|
21
|
+
self.invocation_stats: list[LanguageModelInvocationStats] = (
|
|
22
|
+
invocation_stats or []
|
|
23
|
+
)
|
|
@@ -18,6 +18,9 @@ from unique_toolkit.content import ContentReference
|
|
|
18
18
|
from unique_toolkit.content.schemas import ContentChunk
|
|
19
19
|
from unique_toolkit.language_model.builder import MessagesBuilder
|
|
20
20
|
from unique_toolkit.language_model.infos import ModelCapabilities
|
|
21
|
+
from unique_toolkit.language_model.invocation_stats import (
|
|
22
|
+
LanguageModelInvocationStats,
|
|
23
|
+
)
|
|
21
24
|
from unique_toolkit.language_model.schemas import (
|
|
22
25
|
LanguageModelMessages,
|
|
23
26
|
LanguageModelStreamResponse,
|
|
@@ -73,29 +76,58 @@ async def check_hallucination(
|
|
|
73
76
|
|
|
74
77
|
try:
|
|
75
78
|
msgs = _get_msgs(input, config)
|
|
76
|
-
|
|
77
79
|
result = await LanguageModelService.complete_async_util(
|
|
78
80
|
company_id=company_id, user_id=user_id, messages=msgs, model_name=model_name
|
|
79
81
|
)
|
|
82
|
+
except Exception as e:
|
|
83
|
+
error_message = "Error occurred during hallucination metric analysis"
|
|
84
|
+
raise EvaluatorException(
|
|
85
|
+
error_message=f"{error_message}: {e}",
|
|
86
|
+
user_message=error_message,
|
|
87
|
+
exception=e,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
# Captured as soon as the (billable) LLM call returns, so a failure below
|
|
91
|
+
# (empty content, parsing) can still report it instead of losing it.
|
|
92
|
+
invocation_stats = (
|
|
93
|
+
[
|
|
94
|
+
LanguageModelInvocationStats.from_usage(
|
|
95
|
+
model_name, result.usage, source="hallucination"
|
|
96
|
+
)
|
|
97
|
+
]
|
|
98
|
+
if result.usage is not None
|
|
99
|
+
else []
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
try:
|
|
80
103
|
result_content = result.choices[0].message.content
|
|
81
104
|
if not result_content or not isinstance(result_content, str):
|
|
82
105
|
error_message = "Hallucination evaluation did not return a text result."
|
|
83
106
|
raise EvaluatorException(
|
|
84
107
|
error_message=error_message,
|
|
85
108
|
user_message=error_message,
|
|
109
|
+
invocation_stats=invocation_stats,
|
|
86
110
|
)
|
|
87
|
-
|
|
111
|
+
eval_result = parse_eval_metric_result(
|
|
88
112
|
result_content,
|
|
89
113
|
EvaluationMetricName.HALLUCINATION,
|
|
90
114
|
)
|
|
91
|
-
|
|
92
|
-
return
|
|
115
|
+
eval_result.invocation_stats = invocation_stats
|
|
116
|
+
return eval_result
|
|
117
|
+
except EvaluatorException as e:
|
|
118
|
+
# parse_eval_metric_result raises its own EvaluatorException (with no
|
|
119
|
+
# invocation_stats, since it has no usage context) -- attach ours if
|
|
120
|
+
# it didn't already carry stats, instead of re-raising it stats-less.
|
|
121
|
+
if not e.invocation_stats:
|
|
122
|
+
e.invocation_stats = invocation_stats
|
|
123
|
+
raise
|
|
93
124
|
except Exception as e:
|
|
94
125
|
error_message = "Error occurred during hallucination metric analysis"
|
|
95
126
|
raise EvaluatorException(
|
|
96
127
|
error_message=f"{error_message}: {e}",
|
|
97
128
|
user_message=error_message,
|
|
98
129
|
exception=e,
|
|
130
|
+
invocation_stats=invocation_stats,
|
|
99
131
|
)
|
|
100
132
|
|
|
101
133
|
|
|
@@ -10,6 +10,7 @@ from unique_toolkit.chat.schemas import (
|
|
|
10
10
|
ChatMessageAssessmentStatus,
|
|
11
11
|
ChatMessageAssessmentType,
|
|
12
12
|
)
|
|
13
|
+
from unique_toolkit.language_model.invocation_stats import LanguageModelInvocationStats
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
class EvaluationMetricName(StrEnum):
|
|
@@ -102,6 +103,7 @@ class EvaluationMetricResult(BaseModel):
|
|
|
102
103
|
user_info: Optional[str] = None
|
|
103
104
|
error: Exception | None = None
|
|
104
105
|
fact_list: list[str] = Field(default_factory=list[str])
|
|
106
|
+
invocation_stats: list[LanguageModelInvocationStats] = Field(default_factory=list)
|
|
105
107
|
|
|
106
108
|
|
|
107
109
|
class EvaluationAssessmentMessage(BaseModel):
|
|
@@ -16,6 +16,7 @@ from unique_toolkit.agentic.evaluation.schemas import (
|
|
|
16
16
|
from unique_toolkit.language_model.schemas import (
|
|
17
17
|
LanguageModelAssistantMessage,
|
|
18
18
|
LanguageModelCompletionChoice,
|
|
19
|
+
LanguageModelTokenUsage,
|
|
19
20
|
)
|
|
20
21
|
from unique_toolkit.language_model.service import LanguageModelResponse
|
|
21
22
|
|
|
@@ -271,3 +272,73 @@ async def test_analyze__raises_evaluator_exception__with_unknown_error(
|
|
|
271
272
|
assert "Unknown error occurred during context relevancy metric analysis" in str(
|
|
272
273
|
exc_info.value
|
|
273
274
|
)
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
@pytest.mark.ai
|
|
278
|
+
@pytest.mark.asyncio
|
|
279
|
+
async def test_analyze__preserves_invocation_stats__on_regular_output_read_error(
|
|
280
|
+
context_relevancy_evaluator: MagicMock,
|
|
281
|
+
sample_evaluation_input: EvaluationMetricInput,
|
|
282
|
+
basic_evaluation_config: EvaluationMetricConfig,
|
|
283
|
+
) -> None:
|
|
284
|
+
"""
|
|
285
|
+
Purpose: A billed LLM call that returns no choices must still surface its
|
|
286
|
+
usage, instead of losing it to the generic error path.
|
|
287
|
+
Why this matters: `result.choices[0]` access is not otherwise guarded; an
|
|
288
|
+
empty `choices` list must not silently drop invocation_stats.
|
|
289
|
+
"""
|
|
290
|
+
mock_result: LanguageModelResponse = LanguageModelResponse(
|
|
291
|
+
choices=[],
|
|
292
|
+
usage=LanguageModelTokenUsage(
|
|
293
|
+
completion_tokens=1, prompt_tokens=2, total_tokens=3
|
|
294
|
+
),
|
|
295
|
+
)
|
|
296
|
+
|
|
297
|
+
with patch.object(
|
|
298
|
+
context_relevancy_evaluator.language_model_service,
|
|
299
|
+
"complete_async",
|
|
300
|
+
return_value=mock_result,
|
|
301
|
+
):
|
|
302
|
+
with pytest.raises(EvaluatorException) as exc_info:
|
|
303
|
+
await context_relevancy_evaluator.analyze(
|
|
304
|
+
sample_evaluation_input, basic_evaluation_config
|
|
305
|
+
)
|
|
306
|
+
|
|
307
|
+
assert len(exc_info.value.invocation_stats) == 1
|
|
308
|
+
assert exc_info.value.invocation_stats[0].token_usage.total_tokens == 3
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
@pytest.mark.ai
|
|
312
|
+
@pytest.mark.asyncio
|
|
313
|
+
async def test_analyze__preserves_invocation_stats__on_structured_output_read_error(
|
|
314
|
+
context_relevancy_evaluator: MagicMock,
|
|
315
|
+
sample_evaluation_input: EvaluationMetricInput,
|
|
316
|
+
structured_evaluation_config: EvaluationMetricConfig,
|
|
317
|
+
) -> None:
|
|
318
|
+
"""
|
|
319
|
+
Purpose: Same as the regular-output case, for the structured-output path.
|
|
320
|
+
"""
|
|
321
|
+
mock_result: LanguageModelResponse = LanguageModelResponse(
|
|
322
|
+
choices=[],
|
|
323
|
+
usage=LanguageModelTokenUsage(
|
|
324
|
+
completion_tokens=1, prompt_tokens=2, total_tokens=3
|
|
325
|
+
),
|
|
326
|
+
)
|
|
327
|
+
structured_output_schema: type[EvaluationSchemaStructuredOutput] = (
|
|
328
|
+
EvaluationSchemaStructuredOutput
|
|
329
|
+
)
|
|
330
|
+
|
|
331
|
+
with patch.object(
|
|
332
|
+
context_relevancy_evaluator.language_model_service,
|
|
333
|
+
"complete_async",
|
|
334
|
+
return_value=mock_result,
|
|
335
|
+
):
|
|
336
|
+
with pytest.raises(EvaluatorException) as exc_info:
|
|
337
|
+
await context_relevancy_evaluator.analyze(
|
|
338
|
+
sample_evaluation_input,
|
|
339
|
+
structured_evaluation_config,
|
|
340
|
+
structured_output_schema,
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
assert len(exc_info.value.invocation_stats) == 1
|
|
344
|
+
assert exc_info.value.invocation_stats[0].token_usage.total_tokens == 3
|
|
@@ -6,6 +6,7 @@ from unique_toolkit.agentic.loop_runner._iteration_handler_utils import (
|
|
|
6
6
|
from unique_toolkit.agentic.loop_runner.base import (
|
|
7
7
|
LoopIterationRunner,
|
|
8
8
|
ResponsesLoopIterationRunner,
|
|
9
|
+
SupportsInvocationStats,
|
|
9
10
|
)
|
|
10
11
|
from unique_toolkit.agentic.loop_runner.middleware import (
|
|
11
12
|
PlanningConfig,
|
|
@@ -42,4 +43,5 @@ __all__ = [
|
|
|
42
43
|
"QWEN_MAX_LOOP_ITERATIONS",
|
|
43
44
|
"ResponsesLoopIterationRunner",
|
|
44
45
|
"ResponsesBasicLoopIterationRunner",
|
|
46
|
+
"SupportsInvocationStats",
|
|
45
47
|
]
|
|
@@ -6,6 +6,7 @@ from unique_toolkit.agentic.loop_runner.base import (
|
|
|
6
6
|
_LoopIterationRunnerKwargs,
|
|
7
7
|
)
|
|
8
8
|
from unique_toolkit.chat.functions import LanguageModelStreamResponse
|
|
9
|
+
from unique_toolkit.language_model.schemas import LanguageModelTokenUsage
|
|
9
10
|
|
|
10
11
|
_LOGGER = logging.getLogger(__name__)
|
|
11
12
|
|
|
@@ -103,5 +104,6 @@ async def run_forced_tools_iteration(
|
|
|
103
104
|
response = responses[0]
|
|
104
105
|
response.tool_calls = tool_calls if len(tool_calls) > 0 else None
|
|
105
106
|
response.message.references = references
|
|
107
|
+
response.usage = LanguageModelTokenUsage.sum_usages(r.usage for r in responses)
|
|
106
108
|
|
|
107
109
|
return response
|
|
@@ -7,7 +7,10 @@ from unique_toolkit.agentic.loop_runner._responses_stream_handler_utils import (
|
|
|
7
7
|
from unique_toolkit.agentic.loop_runner.base import (
|
|
8
8
|
_ResponsesLoopIterationRunnerKwargs,
|
|
9
9
|
)
|
|
10
|
-
from unique_toolkit.language_model.schemas import
|
|
10
|
+
from unique_toolkit.language_model.schemas import (
|
|
11
|
+
LanguageModelTokenUsage,
|
|
12
|
+
ResponsesLanguageModelStreamResponse,
|
|
13
|
+
)
|
|
11
14
|
|
|
12
15
|
_LOGGER = logging.getLogger(__name__)
|
|
13
16
|
|
|
@@ -59,5 +62,6 @@ async def handle_responses_forced_tools_iteration(
|
|
|
59
62
|
response = responses[0]
|
|
60
63
|
response.tool_calls = tool_calls if len(tool_calls) > 0 else None
|
|
61
64
|
response.message.references = references
|
|
65
|
+
response.usage = LanguageModelTokenUsage.sum_usages(r.usage for r in responses)
|
|
62
66
|
|
|
63
67
|
return response
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Any, Protocol, Required, Unpack
|
|
1
|
+
from typing import Any, Protocol, Required, Unpack, runtime_checkable
|
|
2
2
|
|
|
3
3
|
from openai.types.chat import ChatCompletionNamedToolChoiceParam
|
|
4
4
|
from openai.types.responses import (
|
|
@@ -15,6 +15,9 @@ from unique_toolkit.chat.functions import LanguageModelStreamResponse
|
|
|
15
15
|
from unique_toolkit.chat.service import LanguageModelMessages
|
|
16
16
|
from unique_toolkit.content import ContentChunk
|
|
17
17
|
from unique_toolkit.language_model.infos import LanguageModelInfo
|
|
18
|
+
from unique_toolkit.language_model.invocation_stats import (
|
|
19
|
+
LanguageModelInvocationStats,
|
|
20
|
+
)
|
|
18
21
|
from unique_toolkit.language_model.schemas import (
|
|
19
22
|
ResponsesLanguageModelStreamResponse,
|
|
20
23
|
ResponsesMessageInput,
|
|
@@ -25,6 +28,17 @@ from unique_toolkit.protocols.support import (
|
|
|
25
28
|
)
|
|
26
29
|
|
|
27
30
|
|
|
31
|
+
@runtime_checkable
|
|
32
|
+
class SupportsInvocationStats(Protocol):
|
|
33
|
+
"""Optional capability for a loop iteration runner (or middleware wrapping
|
|
34
|
+
one) that makes its own extra LLM call(s) beyond the main iteration
|
|
35
|
+
response — e.g. a planning step. `unique_ai.py` checks for this via
|
|
36
|
+
`isinstance` and, if present, folds the returned stats into the turn's
|
|
37
|
+
accumulator; runners that don't make extra calls need not implement it."""
|
|
38
|
+
|
|
39
|
+
def get_invocation_stats(self) -> list[LanguageModelInvocationStats]: ...
|
|
40
|
+
|
|
41
|
+
|
|
28
42
|
class _LoopIterationRunnerKwargs(TypedDict, total=False):
|
|
29
43
|
iteration_index: Required[int]
|
|
30
44
|
streaming_handler: Required[SupportCompleteWithReferences]
|
|
@@ -37,9 +37,13 @@ from unique_toolkit.language_model import (
|
|
|
37
37
|
LanguageModelAssistantMessage,
|
|
38
38
|
LanguageModelUserMessage,
|
|
39
39
|
)
|
|
40
|
+
from unique_toolkit.language_model.invocation_stats import (
|
|
41
|
+
LanguageModelInvocationStats,
|
|
42
|
+
)
|
|
40
43
|
from unique_toolkit.language_model.schemas import (
|
|
41
44
|
LanguageModelMessageOptions,
|
|
42
45
|
LanguageModelMessages,
|
|
46
|
+
LanguageModelTokenUsage,
|
|
43
47
|
ResponsesLanguageModelStreamResponse,
|
|
44
48
|
)
|
|
45
49
|
|
|
@@ -136,6 +140,12 @@ class PlanningMiddleware(LoopIterationRunner):
|
|
|
136
140
|
self._loop_runner = loop_runner
|
|
137
141
|
self._history_manager = history_manager
|
|
138
142
|
self._llm_service = llm_service
|
|
143
|
+
self._invocation_stats: list[LanguageModelInvocationStats] = []
|
|
144
|
+
|
|
145
|
+
def get_invocation_stats(self) -> list[LanguageModelInvocationStats]:
|
|
146
|
+
"""Return and clear the planning-step stats captured since the last call."""
|
|
147
|
+
stats, self._invocation_stats = self._invocation_stats, []
|
|
148
|
+
return stats
|
|
139
149
|
|
|
140
150
|
@failsafe_async(failure_return_value=None, logger=_LOGGER)
|
|
141
151
|
async def _run_plan_step(
|
|
@@ -155,6 +165,13 @@ class PlanningMiddleware(LoopIterationRunner):
|
|
|
155
165
|
other_options=other_options,
|
|
156
166
|
)
|
|
157
167
|
|
|
168
|
+
if response.usage is not None:
|
|
169
|
+
self._invocation_stats.append(
|
|
170
|
+
LanguageModelInvocationStats.from_usage(
|
|
171
|
+
kwargs["model"].name, response.usage, source="planning"
|
|
172
|
+
)
|
|
173
|
+
)
|
|
174
|
+
|
|
158
175
|
if response.choices[0].message.parsed is None:
|
|
159
176
|
_LOGGER.info("Error parsing planning response")
|
|
160
177
|
return None
|
|
@@ -196,6 +213,12 @@ class ResponsesPlanningMiddleware(ResponsesLoopIterationRunner):
|
|
|
196
213
|
self._loop_runner = loop_runner
|
|
197
214
|
self._history_manager = history_manager
|
|
198
215
|
self._openai_client = openai_client
|
|
216
|
+
self._invocation_stats: list[LanguageModelInvocationStats] = []
|
|
217
|
+
|
|
218
|
+
def get_invocation_stats(self) -> list[LanguageModelInvocationStats]:
|
|
219
|
+
"""Return and clear the planning-step stats captured since the last call."""
|
|
220
|
+
stats, self._invocation_stats = self._invocation_stats, []
|
|
221
|
+
return stats
|
|
199
222
|
|
|
200
223
|
def _build_forwarded_options(
|
|
201
224
|
self, kwargs: _ResponsesLoopIterationRunnerKwargs
|
|
@@ -260,6 +283,15 @@ class ResponsesPlanningMiddleware(ResponsesLoopIterationRunner):
|
|
|
260
283
|
**forwarded_options,
|
|
261
284
|
)
|
|
262
285
|
|
|
286
|
+
if response.usage is not None:
|
|
287
|
+
self._invocation_stats.append(
|
|
288
|
+
LanguageModelInvocationStats.from_usage(
|
|
289
|
+
model_name,
|
|
290
|
+
LanguageModelTokenUsage.model_validate(response.usage),
|
|
291
|
+
source="planning",
|
|
292
|
+
)
|
|
293
|
+
)
|
|
294
|
+
|
|
263
295
|
output_text = _get_first_tool_call_arguments(response)
|
|
264
296
|
if not output_text:
|
|
265
297
|
_LOGGER.info("Empty planning response")
|
|
@@ -5,6 +5,9 @@ from logging import Logger
|
|
|
5
5
|
|
|
6
6
|
from unique_toolkit._common.execution import SafeTaskExecutor
|
|
7
7
|
from unique_toolkit.chat.service import ChatService
|
|
8
|
+
from unique_toolkit.language_model.invocation_stats import (
|
|
9
|
+
LanguageModelInvocationStats,
|
|
10
|
+
)
|
|
8
11
|
from unique_toolkit.language_model.schemas import (
|
|
9
12
|
LanguageModelStreamResponse,
|
|
10
13
|
ResponsesLanguageModelStreamResponse,
|
|
@@ -33,6 +36,11 @@ class Postprocessor(ABC):
|
|
|
33
36
|
"Subclasses must implement this method to remove post-processing from the message."
|
|
34
37
|
)
|
|
35
38
|
|
|
39
|
+
@property
|
|
40
|
+
def invocation_stats(self) -> list[LanguageModelInvocationStats]:
|
|
41
|
+
"""Override in subclasses whose `run()` makes its own LLM call(s)."""
|
|
42
|
+
return []
|
|
43
|
+
|
|
36
44
|
|
|
37
45
|
class ResponsesApiPostprocessor(ABC):
|
|
38
46
|
def __init__(self, name: str):
|
|
@@ -58,6 +66,14 @@ class ResponsesApiPostprocessor(ABC):
|
|
|
58
66
|
"Subclasses must implement this method to remove post-processing from the message."
|
|
59
67
|
)
|
|
60
68
|
|
|
69
|
+
@property
|
|
70
|
+
def invocation_stats(self) -> list[LanguageModelInvocationStats]:
|
|
71
|
+
"""Per-LLM-call stats from any call(s) this postprocessor made in its last `run()`.
|
|
72
|
+
|
|
73
|
+
Default empty — override in subclasses that make their own LLM calls.
|
|
74
|
+
"""
|
|
75
|
+
return []
|
|
76
|
+
|
|
61
77
|
|
|
62
78
|
class PostprocessorManager:
|
|
63
79
|
"""
|
|
@@ -88,6 +104,7 @@ class PostprocessorManager:
|
|
|
88
104
|
self._chat_service = chat_service
|
|
89
105
|
self._postprocessors: list[Postprocessor | ResponsesApiPostprocessor] = []
|
|
90
106
|
self._execution_times: dict[str, float] = {}
|
|
107
|
+
self._invocation_stats: list[LanguageModelInvocationStats] = []
|
|
91
108
|
|
|
92
109
|
# Allow to add postprocessors that should be run before or after the others.
|
|
93
110
|
self._first_postprocessor: Postprocessor | ResponsesApiPostprocessor | None = (
|
|
@@ -128,6 +145,7 @@ class PostprocessorManager:
|
|
|
128
145
|
loop_response: LanguageModelStreamResponse,
|
|
129
146
|
) -> dict[str, object | None]:
|
|
130
147
|
self._execution_times = {}
|
|
148
|
+
self._invocation_stats = []
|
|
131
149
|
|
|
132
150
|
task_executor = SafeTaskExecutor(
|
|
133
151
|
logger=self._logger,
|
|
@@ -174,6 +192,10 @@ class PostprocessorManager:
|
|
|
174
192
|
def get_execution_times(self) -> dict[str, float]:
|
|
175
193
|
return self._execution_times.copy()
|
|
176
194
|
|
|
195
|
+
def get_invocation_stats(self) -> list[LanguageModelInvocationStats]:
|
|
196
|
+
"""Per-LLM-call stats from every postprocessor that made its own LLM call(s)."""
|
|
197
|
+
return list(self._invocation_stats)
|
|
198
|
+
|
|
177
199
|
async def execute_postprocessors(
|
|
178
200
|
self,
|
|
179
201
|
loop_response: LanguageModelStreamResponse,
|
|
@@ -184,6 +206,7 @@ class PostprocessorManager:
|
|
|
184
206
|
self._execution_times[postprocessor_instance.name] = round(
|
|
185
207
|
time.perf_counter() - start, 3
|
|
186
208
|
)
|
|
209
|
+
self._invocation_stats.extend(postprocessor_instance.invocation_stats)
|
|
187
210
|
return result
|
|
188
211
|
|
|
189
212
|
async def remove_from_text(
|