unique-toolkit 2026.30.0.dev18__tar.gz → 2026.30.0.dev20__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.dev18 → unique_toolkit-2026.30.0.dev20}/PKG-INFO +2 -2
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/pyproject.toml +2 -2
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +11 -5
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +81 -11
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/evaluation_manager.py +17 -0
- unique_toolkit-2026.30.0.dev20/unique_toolkit/agentic/evaluation/exception.py +23 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/hallucination/utils.py +36 -4
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/schemas.py +2 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +71 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/loop_runner/__init__.py +2 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +2 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +5 -1
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/loop_runner/base.py +15 -1
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +32 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +37 -5
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +41 -6
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +2 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +2 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +57 -2
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/schemas.py +5 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +16 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +1 -5
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +1 -5
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/language_model/__init__.py +4 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/language_model/functions.py +8 -0
- unique_toolkit-2026.30.0.dev20/unique_toolkit/language_model/invocation_stats.py +70 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/language_model/schemas.py +151 -2
- unique_toolkit-2026.30.0.dev18/unique_toolkit/agentic/evaluation/exception.py +0 -5
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/README.md +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/_base_service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/_time_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/config_checker/README.md +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/config_checker/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/config_checker/__main__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/config_checker/cli.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/config_checker/differ.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/config_checker/exporter.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/config_checker/models.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/config_checker/registry.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/config_checker/validator.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/default_language_model.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/docx_generator/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/docx_generator/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/endpoint_builder.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/event_bus.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/exception.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/execution.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/feature_flags/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/metadata_filter_scope.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/pydantic_helpers.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/referencing.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/string_utilities.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/tests/test_referencing.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/token/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/token/image_token_counting.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/token/token_counting.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/utils/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/utils/files.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/utils/image/encode.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/utils/jinja/render.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/utils/write_configuration.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/validate_required_values.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/_common/validators.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/tests/test_hallucination_external_context.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/evaluation/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/history_manager/settings.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/history_manager/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/message_log_order.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/reference_manager/tests/test_external_context.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/ask_user_tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/ask_user_tool/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/ask_user_tool/tool.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/factory.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/names.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/activator/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_container.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_files.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/_memory.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/builder/builder.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/artifacts.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/tool/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/run_context.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/tool.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic_table/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic_table/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic_table/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/agentic_table/synthetic_chat_event.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/app/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/app/dev_util.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/app/fast_api_factory.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/app/feature_flags.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/app/find_env_file.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/app/init_logging.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/app/init_sdk.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/app/performance/async_tasks.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/app/performance/async_wrapper.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/app/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/app/unique_settings.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/app/verification.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/app/webhook.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/chat/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/chat/cancellation.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/chat/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/chat/deprecated/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/chat/deprecated/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/chat/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/chat/rendering.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/chat/responses_api.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/chat/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/chat/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/chat/state.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/chat/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/content/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/content/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/content/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/content/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/content/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/content/smart_rules.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/content/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/data_extraction/README.md +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/data_extraction/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/data_extraction/augmented/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/data_extraction/base.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/data_extraction/basic/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/data_extraction/basic/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/elicitation/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/elicitation/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/elicitation/exceptions.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/elicitation/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/elicitation/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/elicitation/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/embedding/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/embedding/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/embedding/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/embedding/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/embedding/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/embedding/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/README.md +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/_internal/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/_internal/streaming/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/_internal/streaming/common.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/_base.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/content_tree/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/internal_search/base/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/identity/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/feature_flags/README.md +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/feature_flags/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/feature_flags/_graphql_client.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/feature_flags/_ttl_cache.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/feature_flags/client.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/feature_flags/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/feature_flags/settings.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/group/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/group/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/user/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/resources/user/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/experimental/testing/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/framework_utilities/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/framework_utilities/openai/client.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/framework_utilities/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/language_model/builder.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/language_model/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/language_model/default_language_model.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/language_model/infos.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/language_model/prompt.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/language_model/reference.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/language_model/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/language_model/settings.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/language_model/stream_transform.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/language_model/utils.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/monitoring/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/monitoring/gunicorn.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/monitoring/middleware.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/monitoring/registry.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/protocols/support.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/services/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/services/chat_service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/services/factory.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/services/knowledge_base.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/short_term_memory/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/short_term_memory/constants.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/short_term_memory/functions.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/short_term_memory/schemas.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/short_term_memory/service.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/smart_rules/__init__.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/unique_toolkit/smart_rules/compile.py +0 -0
- {unique_toolkit-2026.30.0.dev18 → unique_toolkit-2026.30.0.dev20}/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.dev20
|
|
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.dev20"
|
|
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",
|
|
@@ -2,6 +2,9 @@ from typing import Any, Required, TypedDict
|
|
|
2
2
|
|
|
3
3
|
from unique_toolkit.agentic.tools.openai_builtin import OpenAICodeInterpreterTool
|
|
4
4
|
from unique_toolkit.agentic.tools.openai_builtin.base import OpenAIBuiltInToolName
|
|
5
|
+
from unique_toolkit.agentic.tools.openai_builtin.code_interpreter.postprocessors.generated_files import (
|
|
6
|
+
ArtifactsDebugInfo,
|
|
7
|
+
)
|
|
5
8
|
from unique_toolkit.agentic.tools.schemas import ToolCallResponse
|
|
6
9
|
from unique_toolkit.agentic.tools.tool_manager import ToolManager
|
|
7
10
|
from unique_toolkit.language_model.schemas import (
|
|
@@ -55,7 +58,7 @@ class Analytics(TypedDict):
|
|
|
55
58
|
|
|
56
59
|
class DebugInfoManager:
|
|
57
60
|
def __init__(self):
|
|
58
|
-
self.debug_info = {"tools": []}
|
|
61
|
+
self.debug_info: dict[str, Any] = {"tools": []}
|
|
59
62
|
|
|
60
63
|
def extract_tool_debug_info(
|
|
61
64
|
self,
|
|
@@ -106,6 +109,7 @@ class DebugInfoManager:
|
|
|
106
109
|
answer_length: int = 0,
|
|
107
110
|
loop_iteration_count: int = 0,
|
|
108
111
|
total_time_to_answer_ms: int | None = None,
|
|
112
|
+
artifacts: ArtifactsDebugInfo | None = None,
|
|
109
113
|
) -> None:
|
|
110
114
|
"""Add a stable 'analytics' snapshot for downstream ROI/usage reporting.
|
|
111
115
|
|
|
@@ -121,6 +125,10 @@ class DebugInfoManager:
|
|
|
121
125
|
_to_analytics_tool_entry(tool, tool_display_names)
|
|
122
126
|
for tool in self.debug_info.get("tools", [])
|
|
123
127
|
]
|
|
128
|
+
# Artifacts are recorded at the postprocessor seam (Code Interpreter's
|
|
129
|
+
# DisplayCodeInterpreterFilesPostProcessor) into debug_info["artifacts"].
|
|
130
|
+
# Absent when no Code Interpreter ran this turn → both fields stay None,
|
|
131
|
+
# preserving the always-present, null-when-unknown contract.
|
|
124
132
|
analytics = Analytics(
|
|
125
133
|
tools_used=analytics_tools,
|
|
126
134
|
tool_call_count=len(analytics_tools),
|
|
@@ -140,10 +148,8 @@ class DebugInfoManager:
|
|
|
140
148
|
subagent_names_used=_unique_tool_names(analytics_tools, "is_sub_agent"),
|
|
141
149
|
mcp_tool_names_used=_unique_tool_names(analytics_tools, "is_mcp"),
|
|
142
150
|
total_time_to_answer_ms=total_time_to_answer_ms,
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
artifacts_created_count=None,
|
|
146
|
-
artifacts_created_filetype=None,
|
|
151
|
+
artifacts_created_count=artifacts["count"] if artifacts else None,
|
|
152
|
+
artifacts_created_filetype=artifacts["filetypes"] if artifacts else None,
|
|
147
153
|
)
|
|
148
154
|
self.add("analytics", analytics)
|
|
149
155
|
|
|
@@ -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")
|