unique-toolkit 2026.20.0.dev34__tar.gz → 2026.20.0.dev35__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.
Files changed (393) hide show
  1. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/PKG-INFO +1 -1
  2. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/pyproject.toml +6 -1
  3. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/event_bus.py +25 -4
  4. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/loop_runner/_responses_stream_handler_utils.py +2 -11
  5. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/loop_runner/base.py +3 -11
  6. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/loop_runner/middleware/planning/planning.py +49 -3
  7. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/chat/responses_api.py +7 -24
  8. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/content/schemas.py +16 -0
  9. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/_internal/streaming/__init__.py +35 -0
  10. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/_internal/streaming/common.py +208 -0
  11. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/_internal/streaming/pattern_replacer.py +222 -0
  12. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/__init__.py +1 -0
  13. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/__init__.py +1 -0
  14. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/__init__.py +93 -0
  15. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/_async_bridge.py +46 -0
  16. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/__init__.py +15 -0
  17. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/complete_with_references.py +484 -0
  18. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/stream_event_router.py +163 -0
  19. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/text_event_handler.py +140 -0
  20. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/chat_completions/tool_call_event_handler.py +87 -0
  21. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/events.py +174 -0
  22. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/__init__.py +34 -0
  23. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/chat_completions.py +43 -0
  24. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/protocols/responses.py +97 -0
  25. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/__init__.py +23 -0
  26. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/code_interpreter_event_handler.py +111 -0
  27. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/complete_with_references.py +621 -0
  28. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/completed_event_handler.py +49 -0
  29. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/stream_event_router.py +215 -0
  30. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/text_delta_event_handler.py +97 -0
  31. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/responses/tool_call_event_handler.py +103 -0
  32. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/__init__.py +8 -0
  33. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/message_persister.py +178 -0
  34. unique_toolkit-2026.20.0.dev35/unique_toolkit/experimental/integrations/openai/streaming/event_routing/subscribers/progress_log_persister.py +90 -0
  35. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/language_model/reference.py +11 -55
  36. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/language_model/schemas.py +12 -1
  37. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/protocols/support.py +5 -19
  38. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/services/chat_service.py +3 -15
  39. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/README.md +0 -0
  40. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/__init__.py +0 -0
  41. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/__init__.py +0 -0
  42. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/_base_service.py +0 -0
  43. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/_time_utils.py +0 -0
  44. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/api_calling/human_verification_manager.py +0 -0
  45. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/base_model_type_attribute.py +0 -0
  46. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/chunk_relevancy_sorter/config.py +0 -0
  47. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/chunk_relevancy_sorter/exception.py +0 -0
  48. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/chunk_relevancy_sorter/schemas.py +0 -0
  49. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/chunk_relevancy_sorter/service.py +0 -0
  50. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/chunk_relevancy_sorter/tests/test_service.py +0 -0
  51. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/config_checker/README.md +0 -0
  52. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/config_checker/__init__.py +0 -0
  53. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/config_checker/__main__.py +0 -0
  54. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/config_checker/cli.py +0 -0
  55. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/config_checker/differ.py +0 -0
  56. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/config_checker/exporter.py +0 -0
  57. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/config_checker/models.py +0 -0
  58. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/config_checker/registry.py +0 -0
  59. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/config_checker/validator.py +0 -0
  60. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/default_language_model.py +0 -0
  61. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/docx_generator/__init__.py +0 -0
  62. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/docx_generator/config.py +0 -0
  63. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/docx_generator/pandoc_converter.py +0 -0
  64. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/docx_generator/schemas.py +0 -0
  65. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/docx_generator/service.py +0 -0
  66. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/docx_generator/template/Doc Template.docx +0 -0
  67. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/endpoint_builder.py +0 -0
  68. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/endpoint_requestor.py +0 -0
  69. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/exception.py +0 -0
  70. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/execution.py +0 -0
  71. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/endpoint_builder.py +0 -0
  72. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/endpoint_requestor.py +0 -0
  73. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/README.md +0 -0
  74. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/__init__.py +0 -0
  75. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/agent.py +0 -0
  76. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/config.py +0 -0
  77. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/examples/data.csv +0 -0
  78. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/examples/example_usage.py +0 -0
  79. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/schemas.py +0 -0
  80. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/services/__init__.py +0 -0
  81. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/__init__.py +0 -0
  82. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/exceptions.py +0 -0
  83. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/service.py +0 -0
  84. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/services/dataframe_handler/utils.py +0 -0
  85. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/__init__.py +0 -0
  86. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/config.py +0 -0
  87. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/exceptions.py +0 -0
  88. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/config.py +0 -0
  89. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/system_prompt.j2 +0 -0
  90. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/prompts/user_prompt.j2 +0 -0
  91. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/services/generation_handler/service.py +0 -0
  92. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/__init__.py +0 -0
  93. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/default_template.j2 +0 -0
  94. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/exceptions.py +0 -0
  95. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/service.py +0 -0
  96. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/services/template_handler/utils.py +0 -0
  97. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/experimental/write_up_agent/utils.py +0 -0
  98. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/feature_flags/schema.py +0 -0
  99. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/metadata_filter_scope.py +0 -0
  100. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/pydantic/rjsf_tags.py +0 -0
  101. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/pydantic_helpers.py +0 -0
  102. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/referencing.py +0 -0
  103. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/string_utilities.py +0 -0
  104. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/tests/test_referencing.py +0 -0
  105. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/tests/test_string_utilities.py +0 -0
  106. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/token/__init__.py +0 -0
  107. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/token/image_token_counting.py +0 -0
  108. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/token/token_counting.py +0 -0
  109. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/token/tokenizers/deepseek/tokenizer.json +0 -0
  110. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/token/tokenizers/qwen/tokenizer.json +0 -0
  111. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/utils/__init__.py +0 -0
  112. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/utils/files.py +0 -0
  113. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/utils/image/encode.py +0 -0
  114. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/utils/jinja/helpers.py +0 -0
  115. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/utils/jinja/render.py +0 -0
  116. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/utils/jinja/schema.py +0 -0
  117. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/utils/jinja/utils.py +0 -0
  118. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/utils/structured_output/__init__.py +0 -0
  119. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/utils/structured_output/schema.py +0 -0
  120. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/utils/write_configuration.py +0 -0
  121. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/validate_required_values.py +0 -0
  122. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/_common/validators.py +0 -0
  123. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/__init__.py +0 -0
  124. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/debug_info_manager/debug_info_manager.py +0 -0
  125. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/debug_info_manager/test/test_debug_info_manager.py +0 -0
  126. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/config.py +0 -0
  127. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/__init__.py +0 -0
  128. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/system_prompt.j2 +0 -0
  129. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/context_relevancy/prompts/user_prompt.j2 +0 -0
  130. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/context_relevancy/schema.py +0 -0
  131. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/context_relevancy/service.py +0 -0
  132. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/evaluation_manager.py +0 -0
  133. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/exception.py +0 -0
  134. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/hallucination/constants.py +0 -0
  135. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/hallucination/hallucination_evaluation.py +0 -0
  136. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/hallucination/prompts/__init__.py +0 -0
  137. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/hallucination/prompts/system_prompt.j2 +0 -0
  138. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/hallucination/prompts/user_prompt.j2 +0 -0
  139. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/hallucination/service.py +0 -0
  140. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/hallucination/utils.py +0 -0
  141. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/output_parser.py +0 -0
  142. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/schemas.py +0 -0
  143. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/tests/fixtures.py +0 -0
  144. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/tests/test_config.py +0 -0
  145. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/tests/test_context_relevancy_service.py +0 -0
  146. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/tests/test_hallucination_constants.py +0 -0
  147. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/tests/test_hallucination_utils.py +0 -0
  148. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/tests/test_output_parser.py +0 -0
  149. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/tests/test_prompt_loaders.py +0 -0
  150. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/evaluation/utils.py +0 -0
  151. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/feature_flags/__init__.py +0 -0
  152. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/feature_flags/feature_flags.py +0 -0
  153. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/history_manager/history_construction_with_contents.py +0 -0
  154. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/history_manager/history_manager.py +0 -0
  155. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/history_manager/loop_token_reducer.py +0 -0
  156. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/history_manager/utils.py +0 -0
  157. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/loop_runner/__init__.py +0 -0
  158. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/loop_runner/_iteration_handler_utils.py +0 -0
  159. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/loop_runner/_responses_iteration_handler_utils.py +0 -0
  160. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/loop_runner/_stream_handler_utils.py +0 -0
  161. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/loop_runner/middleware/__init__.py +0 -0
  162. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/loop_runner/middleware/planning/__init__.py +0 -0
  163. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/loop_runner/middleware/planning/schema.py +0 -0
  164. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/loop_runner/runners/__init__.py +0 -0
  165. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/loop_runner/runners/basic.py +0 -0
  166. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/loop_runner/runners/mistral/__init__.py +0 -0
  167. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/loop_runner/runners/mistral/mistral_runner.py +0 -0
  168. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/loop_runner/runners/qwen/__init__.py +0 -0
  169. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/loop_runner/runners/qwen/helpers.py +0 -0
  170. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/loop_runner/runners/qwen/qwen_runner.py +0 -0
  171. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/message_log_manager/__init__.py +0 -0
  172. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/message_log_manager/service.py +0 -0
  173. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/message_log_order.py +0 -0
  174. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/postprocessor/postprocessor_manager.py +0 -0
  175. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/reference_manager/reference_manager.py +0 -0
  176. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/responses_api/__init__.py +0 -0
  177. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/responses_api/postprocessors/code_display.py +0 -0
  178. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/responses_api/postprocessors/generated_files.py +0 -0
  179. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/responses_api/stream_handler.py +0 -0
  180. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/short_term_memory_manager/persistent_short_term_memory_manager.py +0 -0
  181. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/thinking_manager/thinking_manager.py +0 -0
  182. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/__init__.py +0 -0
  183. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/__init__.py +0 -0
  184. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/config.py +0 -0
  185. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/evaluation/__init__.py +0 -0
  186. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/evaluation/_utils.py +0 -0
  187. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/evaluation/config.py +0 -0
  188. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/evaluation/evaluator.py +0 -0
  189. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/evaluation/summarization_user_message.j2 +0 -0
  190. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/manager.py +0 -0
  191. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/postprocessing/__init__.py +0 -0
  192. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/postprocessing/_display_utils.py +0 -0
  193. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/postprocessing/_ref_utils.py +0 -0
  194. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/postprocessing/config.py +0 -0
  195. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/postprocessing/display.py +0 -0
  196. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/postprocessing/references.py +0 -0
  197. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display.py +0 -0
  198. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_display_utils.py +0 -0
  199. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_ref_utils.py +0 -0
  200. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/postprocessing/test/test_references.py +0 -0
  201. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/prompts.py +0 -0
  202. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/response_watcher/__init__.py +0 -0
  203. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/response_watcher/service.py +0 -0
  204. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/tool/__init__.py +0 -0
  205. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/tool/_memory.py +0 -0
  206. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/tool/_schema.py +0 -0
  207. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/tool/config.py +0 -0
  208. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/tool/service.py +0 -0
  209. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/a2a/tool/test/test_service_utils.py +0 -0
  210. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/agent_chunks_hanlder.py +0 -0
  211. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/config.py +0 -0
  212. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/experimental/__init__.py +0 -0
  213. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/experimental/open_file_tool/__init__.py +0 -0
  214. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/experimental/open_file_tool/config.py +0 -0
  215. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/experimental/open_file_tool/runtime.py +0 -0
  216. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/experimental/open_file_tool/tool.py +0 -0
  217. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/__init__.py +0 -0
  218. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/config.py +0 -0
  219. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/experimental/retrieve_search_scope_tool/tool.py +0 -0
  220. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/experimental/todo/__init__.py +0 -0
  221. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/experimental/todo/config.py +0 -0
  222. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/experimental/todo/prompts/__init__.py +0 -0
  223. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/experimental/todo/prompts/execution_reminder.j2 +0 -0
  224. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/experimental/todo/prompts/system_prompt.j2 +0 -0
  225. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/experimental/todo/prompts/tool_description.j2 +0 -0
  226. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/experimental/todo/prompts/verification_nudge.j2 +0 -0
  227. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/experimental/todo/schemas.py +0 -0
  228. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/experimental/todo/service.py +0 -0
  229. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/factory.py +0 -0
  230. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/mcp/__init__.py +0 -0
  231. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/mcp/manager.py +0 -0
  232. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/mcp/models.py +0 -0
  233. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/mcp/tool_wrapper.py +0 -0
  234. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/names.py +0 -0
  235. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/openai_builtin/__init__.py +0 -0
  236. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/openai_builtin/base.py +0 -0
  237. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/__init__.py +0 -0
  238. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/config.py +0 -0
  239. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/__init__.py +0 -0
  240. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/code_display.py +0 -0
  241. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/postprocessors/generated_files.py +0 -0
  242. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/schemas.py +0 -0
  243. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/openai_builtin/code_interpreter/service.py +0 -0
  244. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/openai_builtin/manager.py +0 -0
  245. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/schemas.py +0 -0
  246. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/test/test_mcp_manager.py +0 -0
  247. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/test/test_tool_progress_reporter.py +0 -0
  248. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/tool.py +0 -0
  249. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/tool_manager.py +0 -0
  250. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/tool_progress_reporter.py +0 -0
  251. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/utils/__init__.py +0 -0
  252. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/utils/source_handling/__init__.py +0 -0
  253. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/utils/source_handling/schema.py +0 -0
  254. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/utils/source_handling/source_formatting.py +0 -0
  255. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic/tools/utils/source_handling/tests/test_source_formatting.py +0 -0
  256. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic_table/__init__.py +0 -0
  257. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic_table/schemas.py +0 -0
  258. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/agentic_table/service.py +0 -0
  259. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/app/__init__.py +0 -0
  260. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/app/chat_event_filter_options_settings.py +0 -0
  261. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/app/dev_util.py +0 -0
  262. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/app/fast_api_factory.py +0 -0
  263. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/app/feature_flags.py +0 -0
  264. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/app/find_env_file.py +0 -0
  265. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/app/init_logging.py +0 -0
  266. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/app/init_sdk.py +0 -0
  267. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/app/performance/async_tasks.py +0 -0
  268. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/app/performance/async_wrapper.py +0 -0
  269. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/app/schemas.py +0 -0
  270. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/app/unique_settings.py +0 -0
  271. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/app/verification.py +0 -0
  272. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/app/webhook.py +0 -0
  273. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/chat/__init__.py +0 -0
  274. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/chat/cancellation.py +0 -0
  275. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/chat/constants.py +0 -0
  276. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/chat/deprecated/service.py +0 -0
  277. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/chat/functions.py +0 -0
  278. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/chat/rendering.py +0 -0
  279. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/chat/schemas.py +0 -0
  280. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/chat/service.py +0 -0
  281. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/chat/state.py +0 -0
  282. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/chat/utils.py +0 -0
  283. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/content/__init__.py +0 -0
  284. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/content/constants.py +0 -0
  285. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/content/functions.py +0 -0
  286. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/content/service.py +0 -0
  287. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/content/smart_rules.py +0 -0
  288. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/content/utils.py +0 -0
  289. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/data_extraction/README.md +0 -0
  290. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/data_extraction/__init__.py +0 -0
  291. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/data_extraction/augmented/__init__.py +0 -0
  292. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/data_extraction/augmented/service.py +0 -0
  293. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/data_extraction/base.py +0 -0
  294. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/data_extraction/basic/__init__.py +0 -0
  295. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/data_extraction/basic/config.py +0 -0
  296. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/data_extraction/basic/prompt.py +0 -0
  297. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/data_extraction/basic/service.py +0 -0
  298. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/elicitation/__init__.py +0 -0
  299. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/elicitation/constants.py +0 -0
  300. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/elicitation/exceptions.py +0 -0
  301. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/elicitation/functions.py +0 -0
  302. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/elicitation/schemas.py +0 -0
  303. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/elicitation/service.py +0 -0
  304. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/embedding/__init__.py +0 -0
  305. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/embedding/constants.py +0 -0
  306. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/embedding/functions.py +0 -0
  307. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/embedding/schemas.py +0 -0
  308. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/embedding/service.py +0 -0
  309. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/embedding/utils.py +0 -0
  310. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/README.md +0 -0
  311. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/__init__.py +0 -0
  312. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/_internal/__init__.py +0 -0
  313. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/__init__.py +0 -0
  314. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/_base.py +0 -0
  315. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/content_tree/__init__.py +0 -0
  316. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/content_tree/functions.py +0 -0
  317. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/content_tree/schemas.py +0 -0
  318. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/content_tree/service.py +0 -0
  319. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/internal_search/__init__.py +0 -0
  320. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/internal_search/base/__init__.py +0 -0
  321. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/internal_search/base/config.py +0 -0
  322. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/internal_search/base/schemas.py +0 -0
  323. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/internal_search/base/service.py +0 -0
  324. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/internal_search/base/utils.py +0 -0
  325. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/internal_search/chat/__init__.py +0 -0
  326. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/internal_search/chat/config.py +0 -0
  327. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/internal_search/chat/schemas.py +0 -0
  328. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/internal_search/chat/service.py +0 -0
  329. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/internal_search/knowledge_base/__init__.py +0 -0
  330. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/internal_search/knowledge_base/config.py +0 -0
  331. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/internal_search/knowledge_base/schemas.py +0 -0
  332. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/internal_search/knowledge_base/service.py +0 -0
  333. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/internal_search/post_processing/__init__.py +0 -0
  334. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/internal_search/post_processing/config.py +0 -0
  335. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/components/internal_search/post_processing/service.py +0 -0
  336. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/content_tree/__init__.py +0 -0
  337. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/identity/__init__.py +0 -0
  338. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/integrations/__init__.py +0 -0
  339. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/__init__.py +0 -0
  340. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/content_folder/__init__.py +0 -0
  341. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/content_folder/functions.py +0 -0
  342. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/content_folder/schemas.py +0 -0
  343. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/content_folder/service.py +0 -0
  344. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/facades/__init__.py +0 -0
  345. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/facades/identity/__init__.py +0 -0
  346. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/facades/identity/service.py +0 -0
  347. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/group/__init__.py +0 -0
  348. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/group/functions.py +0 -0
  349. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/group/schemas.py +0 -0
  350. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/group/service.py +0 -0
  351. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/scheduled_task/__init__.py +0 -0
  352. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/scheduled_task/cron.py +0 -0
  353. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/scheduled_task/functions.py +0 -0
  354. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/scheduled_task/schemas.py +0 -0
  355. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/scheduled_task/service.py +0 -0
  356. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/user/__init__.py +0 -0
  357. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/user/functions.py +0 -0
  358. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/user/schemas.py +0 -0
  359. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/resources/user/service.py +0 -0
  360. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/experimental/testing/__init__.py +0 -0
  361. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/framework_utilities/__init__.py +0 -0
  362. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/framework_utilities/langchain/__init__.py +0 -0
  363. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/framework_utilities/langchain/client.py +0 -0
  364. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/framework_utilities/langchain/history.py +0 -0
  365. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/framework_utilities/openai/__init__.py +0 -0
  366. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/framework_utilities/openai/client.py +0 -0
  367. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/framework_utilities/openai/message_builder.py +0 -0
  368. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/framework_utilities/utils.py +0 -0
  369. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/language_model/__init__.py +0 -0
  370. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/language_model/_responses_api_utils.py +0 -0
  371. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/language_model/builder.py +0 -0
  372. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/language_model/constants.py +0 -0
  373. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/language_model/default_language_model.py +0 -0
  374. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/language_model/functions.py +0 -0
  375. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/language_model/infos.py +0 -0
  376. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/language_model/prompt.py +0 -0
  377. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/language_model/service.py +0 -0
  378. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/language_model/stream_transform.py +0 -0
  379. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/language_model/utils.py +0 -0
  380. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/monitoring/__init__.py +0 -0
  381. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/monitoring/middleware.py +0 -0
  382. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/monitoring/registry.py +0 -0
  383. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/services/__init__.py +0 -0
  384. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/services/factory.py +0 -0
  385. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/services/knowledge_base.py +0 -0
  386. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/short_term_memory/__init__.py +0 -0
  387. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/short_term_memory/constants.py +0 -0
  388. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/short_term_memory/functions.py +0 -0
  389. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/short_term_memory/schemas.py +0 -0
  390. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/short_term_memory/service.py +0 -0
  391. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/smart_rules/__init__.py +0 -0
  392. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/unique_toolkit/smart_rules/compile.py +0 -0
  393. {unique_toolkit-2026.20.0.dev34 → unique_toolkit-2026.20.0.dev35}/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.20.0.dev34
3
+ Version: 2026.20.0.dev35
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>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "unique_toolkit"
3
- version = "2026.20.0.dev34"
3
+ version = "2026.20.0.dev35"
4
4
  description = ""
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -137,6 +137,10 @@ DEP004 = ["langchain_openai", "langchain_core"]
137
137
  # 7. components never call unique_sdk directly (go through a resource)
138
138
  # 8. each integrations/<framework>/ stands alone — enabled when real modules land
139
139
  #
140
+ # Imports under ``if TYPE_CHECKING:`` are excluded from the graph (see
141
+ # ``exclude_type_checking_imports``) so type-only imports (e.g. ``unique_sdk``)
142
+ # do not violate layer/forbidden contracts. Runtime imports are still enforced.
143
+ #
140
144
  # Preference rules from the README that are NOT machine-enforced (import-linter
141
145
  # is pass/fail, not tiered): integrations prefer facades over primitives;
142
146
  # integrations importing components is "discouraged but allowed".
@@ -144,6 +148,7 @@ DEP004 = ["langchain_openai", "langchain_core"]
144
148
  [tool.importlinter]
145
149
  root_packages = ["unique_toolkit"]
146
150
  include_external_packages = true
151
+ exclude_type_checking_imports = true
147
152
 
148
153
  [[tool.importlinter.contracts]]
149
154
  name = "experimental: integrations stack (integrations → resources → _internal)"
@@ -96,7 +96,28 @@ class TypedEventBus(Generic[T]):
96
96
  async def publish_and_wait_async(
97
97
  self, event: T, *, return_exceptions: bool = False
98
98
  ) -> None:
99
- """Invoke every handler and await completion."""
100
- coros = [self._invoke(h, event) for h in list(self._handlers)]
101
- if coros:
102
- await asyncio.gather(*coros, return_exceptions=return_exceptions)
99
+ """Invoke every handler and await completion.
100
+
101
+ When ``return_exceptions=True`` failures from one subscriber do not
102
+ cancel the others, and each swallowed exception is logged. Use this
103
+ at hot-path publish sites (e.g. ``text_delta``) where a single flaky
104
+ analytics subscriber should not abort the stream.
105
+ """
106
+ handlers = list(self._handlers)
107
+ coros = [self._invoke(h, event) for h in handlers]
108
+ if not coros:
109
+ return
110
+ if return_exceptions:
111
+ results = await asyncio.gather(*coros, return_exceptions=True)
112
+ for handler, result in zip(handlers, results):
113
+ if isinstance(result, BaseException) and not isinstance(
114
+ result, asyncio.CancelledError
115
+ ):
116
+ logger.error(
117
+ "Subscriber %r raised during publish; swallowing: %r",
118
+ handler,
119
+ result,
120
+ exc_info=result,
121
+ )
122
+ else:
123
+ await asyncio.gather(*coros)
@@ -2,8 +2,6 @@ from typing import Any, Required, Sequence
2
2
 
3
3
  from openai.types.responses import (
4
4
  ResponseIncludable,
5
- ResponseInputItemParam,
6
- ResponseOutputItem,
7
5
  ResponseTextConfigParam,
8
6
  ToolParam,
9
7
  response_create_params,
@@ -13,22 +11,15 @@ from typing_extensions import TypedDict
13
11
 
14
12
  from unique_toolkit import LanguageModelToolDescription
15
13
  from unique_toolkit.agentic.loop_runner.base import _ResponsesLoopIterationRunnerKwargs
16
- from unique_toolkit.chat.service import LanguageModelMessages
17
14
  from unique_toolkit.content import ContentChunk
18
15
  from unique_toolkit.language_model.schemas import (
19
- LanguageModelMessageOptions,
20
16
  ResponsesLanguageModelStreamResponse,
17
+ ResponsesMessageInput,
21
18
  )
22
19
 
23
20
 
24
21
  class _ResponsesStreamingHandlerKwargs(TypedDict, total=False):
25
- messages: Required[
26
- str
27
- | LanguageModelMessages
28
- | Sequence[
29
- ResponseInputItemParam | LanguageModelMessageOptions | ResponseOutputItem
30
- ]
31
- ]
22
+ messages: Required[ResponsesMessageInput]
32
23
  model_name: Required[str]
33
24
  tools: Sequence[LanguageModelToolDescription | ToolParam]
34
25
  content_chunks: list[ContentChunk]
@@ -1,10 +1,8 @@
1
- from typing import Any, Protocol, Required, Sequence, Unpack
1
+ from typing import Any, Protocol, Required, Unpack
2
2
 
3
3
  from openai.types.chat import ChatCompletionNamedToolChoiceParam
4
4
  from openai.types.responses import (
5
5
  ResponseIncludable,
6
- ResponseInputItemParam,
7
- ResponseOutputItem,
8
6
  ResponseTextConfigParam,
9
7
  ToolParam,
10
8
  response_create_params,
@@ -18,8 +16,8 @@ from unique_toolkit.chat.service import LanguageModelMessages
18
16
  from unique_toolkit.content import ContentChunk
19
17
  from unique_toolkit.language_model.infos import LanguageModelInfo
20
18
  from unique_toolkit.language_model.schemas import (
21
- LanguageModelMessageOptions,
22
19
  ResponsesLanguageModelStreamResponse,
20
+ ResponsesMessageInput,
23
21
  )
24
22
  from unique_toolkit.protocols.support import (
25
23
  ResponsesSupportCompleteWithReferences,
@@ -55,13 +53,7 @@ class LoopIterationRunner(Protocol):
55
53
  class _ResponsesLoopIterationRunnerKwargs(TypedDict, total=False):
56
54
  iteration_index: Required[int]
57
55
  streaming_handler: Required[ResponsesSupportCompleteWithReferences]
58
- messages: Required[
59
- str
60
- | LanguageModelMessages
61
- | Sequence[
62
- ResponseInputItemParam | LanguageModelMessageOptions | ResponseOutputItem
63
- ]
64
- ]
56
+ messages: Required[ResponsesMessageInput]
65
57
  model: Required[LanguageModelInfo]
66
58
  tools: list[LanguageModelToolDescription | ToolParam]
67
59
  content_chunks: list[ContentChunk]
@@ -1,12 +1,14 @@
1
1
  import json
2
2
  import logging
3
- from typing import Any, Unpack
3
+ from collections.abc import Sequence
4
+ from typing import Any, TypeGuard, Unpack
4
5
 
5
6
  from openai import AsyncOpenAI
6
7
  from openai.types.responses import (
7
8
  Response,
8
9
  ResponseFunctionToolCall,
9
10
  ResponseInputItemParam,
11
+ ResponseOutputItem,
10
12
  ToolParam,
11
13
  )
12
14
  from openai.types.responses.function_tool_param import FunctionToolParam
@@ -26,13 +28,17 @@ from unique_toolkit.agentic.loop_runner.middleware.planning.schema import (
26
28
  PlanningSchemaConfig,
27
29
  get_planning_schema,
28
30
  )
29
- from unique_toolkit.chat.responses_api import convert_messages_to_openai
31
+ from unique_toolkit.chat.responses_api import (
32
+ _convert_messages_to_openai,
33
+ convert_messages_to_openai,
34
+ )
30
35
  from unique_toolkit.chat.service import LanguageModelStreamResponse
31
36
  from unique_toolkit.language_model import (
32
37
  LanguageModelAssistantMessage,
33
38
  LanguageModelUserMessage,
34
39
  )
35
40
  from unique_toolkit.language_model.schemas import (
41
+ LanguageModelMessageOptions,
36
42
  LanguageModelMessages,
37
43
  ResponsesLanguageModelStreamResponse,
38
44
  )
@@ -45,6 +51,30 @@ _PLAN_TOOL_DESCRIPTION = (
45
51
  "Record the plan for the next step. Call this tool exactly once."
46
52
  )
47
53
 
54
+
55
+ def _is_language_model_messages(
56
+ msgs: Sequence[object],
57
+ ) -> TypeGuard[list[LanguageModelMessageOptions]]:
58
+ return len(msgs) > 0 and all(
59
+ isinstance(m, LanguageModelMessageOptions) for m in msgs
60
+ )
61
+
62
+
63
+ def _is_response_input_items(
64
+ msgs: Sequence[object],
65
+ ) -> TypeGuard[list[ResponseInputItemParam]]:
66
+ return len(msgs) > 0 and all(isinstance(m, dict) for m in msgs)
67
+
68
+
69
+ def _is_response_output_items(
70
+ msgs: Sequence[object],
71
+ ) -> TypeGuard[list[ResponseOutputItem]]:
72
+ return len(msgs) > 0 and all(
73
+ isinstance(m, BaseModel) and not isinstance(m, LanguageModelMessageOptions)
74
+ for m in msgs
75
+ )
76
+
77
+
48
78
  # Kwargs from _ResponsesLoopIterationRunnerKwargs that make sense to forward to
49
79
  # the planning `responses.create` call. We deliberately exclude anything that
50
80
  # conflicts with the forced-tool-call setup (`tools`, `tool_choices`, `text`,
@@ -270,6 +300,22 @@ class ResponsesPlanningMiddleware(ResponsesLoopIterationRunner):
270
300
  kwargs["messages"].builder().append(assistant_message).build()
271
301
  )
272
302
  else:
273
- kwargs["messages"] = list(kwargs["messages"]) + [assistant_message]
303
+ message_items = list(kwargs["messages"])
304
+ assistant_items = _convert_messages_to_openai([assistant_message])
305
+ if _is_language_model_messages(message_items):
306
+ kwargs["messages"] = [*message_items, assistant_message]
307
+ elif _is_response_input_items(message_items):
308
+ kwargs["messages"] = [*message_items, *assistant_items]
309
+ elif _is_response_output_items(message_items):
310
+ kwargs["messages"] = [
311
+ *_convert_messages_to_openai(message_items),
312
+ *assistant_items,
313
+ ]
314
+ else:
315
+ raise TypeError(
316
+ "messages must be a homogeneous list of "
317
+ "LanguageModelMessageOptions, ResponseInputItemParam dicts, "
318
+ "or ResponseOutputItem models"
319
+ )
274
320
 
275
321
  return await self._loop_runner(**kwargs)
@@ -9,7 +9,6 @@ from openai.types.responses import (
9
9
  ResponseIncludable,
10
10
  ResponseInputItemParam,
11
11
  ResponseInputParam,
12
- ResponseOutputItem,
13
12
  ResponseTextConfigParam,
14
13
  ToolParam,
15
14
  response_create_params,
@@ -50,6 +49,8 @@ from unique_toolkit.language_model.schemas import (
50
49
  LanguageModelToolMessage,
51
50
  LanguageModelUserMessage,
52
51
  ResponsesLanguageModelStreamResponse,
52
+ ResponsesMessageInput,
53
+ ResponsesMessageSequence,
53
54
  reasoning_effort_to_openai,
54
55
  )
55
56
 
@@ -101,9 +102,7 @@ def _convert_to_specific_message(
101
102
 
102
103
 
103
104
  def _convert_messages_to_openai(
104
- messages: Sequence[
105
- ResponseInputItemParam | LanguageModelMessageOptions | ResponseOutputItem
106
- ],
105
+ messages: ResponsesMessageSequence,
107
106
  ) -> ResponseInputParam:
108
107
  res = []
109
108
  for message in messages:
@@ -121,11 +120,7 @@ def _convert_messages_to_openai(
121
120
 
122
121
 
123
122
  def convert_messages_to_openai(
124
- messages: str
125
- | LanguageModelMessages
126
- | Sequence[
127
- ResponseInputItemParam | LanguageModelMessageOptions | ResponseOutputItem
128
- ],
123
+ messages: ResponsesMessageInput,
129
124
  ) -> str | list[ResponseInputItemParam]:
130
125
  if isinstance(messages, str):
131
126
  return messages
@@ -149,11 +144,7 @@ def _prepare_responses_params_util(
149
144
  content_chunks: list[ContentChunk] | None,
150
145
  temperature: float,
151
146
  tools: Sequence[LanguageModelToolDescription | ToolParam] | None,
152
- messages: str
153
- | LanguageModelMessages
154
- | Sequence[
155
- ResponseInputItemParam | LanguageModelMessageOptions | ResponseOutputItem
156
- ],
147
+ messages: ResponsesMessageInput,
157
148
  reasoning: Reasoning | None,
158
149
  text: ResponseTextConfigParam | None,
159
150
  other_options: dict[str, Any] | None = None,
@@ -463,11 +454,7 @@ def stream_responses_with_references(
463
454
  chat_id: str,
464
455
  assistant_id: str,
465
456
  model_name: LanguageModelName | str,
466
- messages: str
467
- | LanguageModelMessages
468
- | Sequence[
469
- ResponseInputItemParam | LanguageModelMessageOptions | ResponseOutputItem
470
- ],
457
+ messages: ResponsesMessageInput,
471
458
  content_chunks: list[ContentChunk] | None = None,
472
459
  tools: Sequence[LanguageModelToolDescription | ToolParam] | None = None,
473
460
  temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
@@ -531,11 +518,7 @@ async def stream_responses_with_references_async(
531
518
  chat_id: str,
532
519
  assistant_id: str,
533
520
  model_name: LanguageModelName | str,
534
- messages: str
535
- | LanguageModelMessages
536
- | Sequence[
537
- ResponseInputItemParam | LanguageModelMessageOptions | ResponseOutputItem
538
- ],
521
+ messages: ResponsesMessageInput,
539
522
  content_chunks: list[ContentChunk] | None = None,
540
523
  tools: Sequence[LanguageModelToolDescription | ToolParam] | None = None,
541
524
  temperature: float = DEFAULT_COMPLETE_TEMPERATURE,
@@ -76,6 +76,22 @@ class ContentChunk(BaseModel):
76
76
  created_at: datetime | None = None
77
77
  updated_at: datetime | None = None
78
78
 
79
+ def to_sdk_reference(
80
+ self,
81
+ sequence_number: int,
82
+ ) -> unique_sdk.Message.Reference:
83
+ """Convert ``ContentChunk`` objects to ``unique_sdk.Message.Reference`` TypedDicts."""
84
+
85
+ return unique_sdk.Message.Reference(
86
+ name=self.title or self.key or self.id or "",
87
+ url=self.url or f"unique://content/{self.id}",
88
+ sequenceNumber=sequence_number + 1,
89
+ sourceId=(f"{self.id}_{self.chunk_id}" if self.chunk_id else self.id or ""),
90
+ source="node-ingestion-chunks",
91
+ description=None,
92
+ originalIndex=[sequence_number + 1],
93
+ )
94
+
79
95
  def to_reference(
80
96
  self,
81
97
  sequence_number: int,
@@ -0,0 +1,35 @@
1
+ """Framework-agnostic streaming components.
2
+
3
+ This subpackage exposes streaming behaviour that is useful beyond a single
4
+ third-party framework: event handler contracts, text state payloads, citation
5
+ normalisation, and other provider-neutral primitives. Concrete framework
6
+ adapters live under :mod:`unique_toolkit.experimental.integrations`.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from .common import (
12
+ ActivityProducer,
13
+ ActivityProgressUpdate,
14
+ ActivityStatus,
15
+ AppendixProducer,
16
+ StreamEventHandlerProtocol,
17
+ StreamTextEventHandlerProtocol,
18
+ StreamToolCallEventHandlerProtocol,
19
+ TextFlushed,
20
+ TextState,
21
+ UsageProducer,
22
+ )
23
+
24
+ __all__ = [
25
+ "ActivityProducer",
26
+ "ActivityProgressUpdate",
27
+ "ActivityStatus",
28
+ "AppendixProducer",
29
+ "StreamEventHandlerProtocol",
30
+ "StreamTextEventHandlerProtocol",
31
+ "StreamToolCallEventHandlerProtocol",
32
+ "TextFlushed",
33
+ "TextState",
34
+ "UsageProducer",
35
+ ]
@@ -0,0 +1,208 @@
1
+ """Framework-agnostic streaming event handler types and lifecycle contract.
2
+
3
+ These types are **framework-agnostic** on purpose: they live in the
4
+ toolkit's domain-layer ``protocols`` package so alternative framework
5
+ adapters (future providers beyond OpenAI) can realize the same event handler
6
+ shape without pulling in OpenAI-specific imports. Concrete, OpenAI-typed
7
+ event handler protocols live next to their implementations under
8
+ ``unique_toolkit.experimental.integrations.openai.streaming.event_routing.protocols``.
9
+
10
+ This module declares:
11
+
12
+ * The lifecycle contract every streaming event handler realizes
13
+ (:class:`StreamEventHandlerProtocol`) plus the accumulated-text value
14
+ (:class:`TextState`).
15
+ * Role-shaped base protocols that group members shared by every
16
+ implementation of a role, regardless of the underlying API:
17
+ :class:`StreamTextEventHandlerProtocol` for text accumulators and
18
+ :class:`StreamToolCallEventHandlerProtocol` for tool-call accumulators.
19
+ Framework-specific subprotocols only add the vendor-typed consumer
20
+ methods (e.g. ``on_chunk`` / ``on_text_delta``).
21
+ * Event-handler bus payload dataclasses (:class:`TextFlushed`,
22
+ :class:`ActivityProgressUpdate`) — carried on per-event handler
23
+ :class:`TypedEventBus` instances, adapted by the orchestrator onto the
24
+ outer :class:`StreamEventBus`.
25
+ * Structural capability protocols event routing aggregate across event handlers
26
+ (:class:`AppendixProducer`, :class:`ActivityProducer`,
27
+ :class:`UsageProducer`).
28
+ """
29
+
30
+ from __future__ import annotations
31
+
32
+ from dataclasses import dataclass
33
+ from typing import TYPE_CHECKING, Literal, Protocol, runtime_checkable
34
+
35
+ if TYPE_CHECKING:
36
+ from unique_toolkit._common.event_bus import TypedEventBus
37
+ from unique_toolkit.language_model.schemas import (
38
+ LanguageModelFunction,
39
+ LanguageModelTokenUsage,
40
+ )
41
+
42
+ ActivityStatus = Literal["RUNNING", "COMPLETED", "FAILED"]
43
+ """Lifecycle state of a tool-like activity exposed to subscribers.
44
+
45
+ Framework-agnostic: the values describe observable progress (running,
46
+ finished, failed) without coupling to any vendor's event taxonomy. Lives
47
+ with :class:`ActivityProgressUpdate` because one is the type of the
48
+ other's ``status`` field.
49
+ """
50
+
51
+
52
+ @dataclass
53
+ class TextState:
54
+ """Accumulated assistant text: normalised (``full_text``) and raw model output (``original_text``)."""
55
+
56
+ full_text: str
57
+ original_text: str
58
+
59
+
60
+ class StreamEventHandlerProtocol(Protocol):
61
+ """Lifecycle methods shared by every event handler (any OpenAI streaming surface).
62
+
63
+ Event handlers that need to surface per-event signals (text flushes, tool
64
+ activity progress, …) expose an event-handler-owned :class:`TypedEventBus`
65
+ instead of returning a signal from their lifecycle methods — see
66
+ :class:`TextFlushed` / :class:`ActivityProgressUpdate` for payloads.
67
+ """
68
+
69
+ async def on_stream_end(self) -> None:
70
+ """Finalize after the stream is exhausted (flush buffers, release resources)."""
71
+ ...
72
+
73
+ def reset(self) -> None:
74
+ """Clear all per-run state for reuse."""
75
+ ...
76
+
77
+
78
+ @dataclass(frozen=True, slots=True)
79
+ class TextFlushed:
80
+ """The text event handler crossed a flush boundary.
81
+
82
+ Carried on the event-handler-owned :class:`TypedEventBus` so subscribers
83
+ (typically the orchestrator) can adapt it into a full :class:`TextUpdate`
84
+ by attaching request context (``message_id`` / ``chat_id``). The
85
+ payload mirrors the event handler's current :meth:`get_text` state at the
86
+ moment of the flush.
87
+
88
+ Flush boundaries combine two concerns: replacer hold-back release
89
+ (e.g. a partial ``[source`` pattern finishing into ``[source1]``) and
90
+ throttling (e.g. ``send_every_n_events`` on the Chat Completions
91
+ event handler). The event handler stays ignorant of the outer bus and identity
92
+ context — it only reports "now is a good time to publish".
93
+ """
94
+
95
+ full_text: str
96
+ original_text: str
97
+ chunk_index: int | None = None
98
+
99
+
100
+ @dataclass(frozen=True, slots=True)
101
+ class ActivityProgressUpdate:
102
+ """Event-handler-local description of a single tool-activity progress transition.
103
+
104
+ Carried on the event-handler-owned :class:`TypedEventBus` so the orchestrator
105
+ can adapt it into an :class:`ActivityProgress` outer-bus event by
106
+ attaching ``message_id`` / ``chat_id``. Event handlers that participate in
107
+ tool-activity tracking publish one of these per genuine state change
108
+ (deduplicated at the event handler level).
109
+ """
110
+
111
+ correlation_id: str
112
+ status: ActivityStatus
113
+ text: str
114
+ order: int = 0
115
+
116
+
117
+ @runtime_checkable
118
+ class AppendixProducer(Protocol):
119
+ """Optional capability: the event handler contributes to the final assistant message.
120
+
121
+ When present, the event routing aggregates appendices across event handlers and
122
+ attaches the tuple to :class:`StreamEnded`, so the message persister
123
+ writes ``full_text + "".join(appendices)`` in a single round-trip. A
124
+ return value of ``None`` means "nothing to append this run".
125
+ """
126
+
127
+ def get_appendix(self) -> str | None:
128
+ """Return the text to append, or ``None`` if this run contributed nothing."""
129
+ ...
130
+
131
+
132
+ @runtime_checkable
133
+ class ActivityProducer(Protocol):
134
+ """Optional capability: the event handler reports tool-activity progress.
135
+
136
+ Realizers expose an event-handler-owned :class:`TypedEventBus` publishing
137
+ :class:`ActivityProgressUpdate` payloads on each genuine state
138
+ transition (deduplicated at the event handler level). The orchestrator
139
+ subscribes to this bus and adapts the updates onto the outer
140
+ :class:`StreamEventBus` by attaching request context. Mirrors
141
+ :class:`AppendixProducer` in spirit: both are named capabilities the
142
+ event routing discovers on event handlers at wire-up time.
143
+ """
144
+
145
+ @property
146
+ def activity_bus(self) -> TypedEventBus[ActivityProgressUpdate]:
147
+ """Event-handler-owned bus publishing progress updates per state transition."""
148
+ ...
149
+
150
+
151
+ @runtime_checkable
152
+ class UsageProducer(Protocol):
153
+ """Optional capability: the event handler exposes token usage for a completed stream.
154
+
155
+ Different streaming APIs surface usage in different places (for example,
156
+ Responses has a completed event while other APIs may attach usage to a
157
+ terminal chunk). This capability lets provider-specific event handlers expose
158
+ the normalized toolkit usage shape without coupling the base lifecycle
159
+ protocol to token accounting.
160
+ """
161
+
162
+ def get_usage(self) -> LanguageModelTokenUsage | None:
163
+ """Return normalized token usage, or ``None`` when unavailable."""
164
+ ...
165
+
166
+
167
+ class StreamTextEventHandlerProtocol(StreamEventHandlerProtocol, Protocol):
168
+ """Base contract for any event handler that accumulates assistant text from a stream.
169
+
170
+ Captures the role members shared by every text event handler regardless of
171
+ the upstream API: an event-handler-owned :class:`TypedEventBus` publishing
172
+ :class:`TextFlushed` at flush boundaries, plus :meth:`get_text` for
173
+ inspecting the accumulated state. Framework-specific subprotocols
174
+ add only the vendor-typed consumer method (e.g.
175
+ ``on_chunk(ChatCompletionChunk)`` for Chat Completions,
176
+ ``on_text_delta(ResponseTextDeltaEvent)`` for Responses).
177
+
178
+ Pure state machine by design: no SDK, no outer bus, no knowledge of
179
+ retrieved chunks — subscribers (typically the orchestrator) adapt
180
+ :class:`TextFlushed` into full :class:`TextUpdate` events by attaching
181
+ request context.
182
+ """
183
+
184
+ @property
185
+ def text_bus(self) -> TypedEventBus[TextFlushed]:
186
+ """Event-handler-owned bus publishing :class:`TextFlushed` at flush boundaries."""
187
+ ...
188
+
189
+ def get_text(self) -> TextState:
190
+ """Return accumulated normalised and original text."""
191
+ ...
192
+
193
+
194
+ class StreamToolCallEventHandlerProtocol(StreamEventHandlerProtocol, Protocol):
195
+ """Base contract for any event handler that accumulates tool calls from a stream.
196
+
197
+ Captures the role members shared by every tool-call event handler
198
+ regardless of the upstream API: :meth:`get_tool_calls` returns the
199
+ accumulated list of :class:`LanguageModelFunction`. Framework-specific
200
+ subprotocols add only the vendor-typed consumer method(s) (e.g.
201
+ ``on_chunk(ChatCompletionChunk)`` for Chat Completions, or the pair
202
+ ``on_output_item_added`` / ``on_function_arguments_done`` for
203
+ Responses).
204
+ """
205
+
206
+ def get_tool_calls(self) -> list[LanguageModelFunction]:
207
+ """Return the list of tool calls observed so far, in arrival order."""
208
+ ...