haystack-ai 3.4.0.dev20261005000357__tar.gz → 3.4.0.dev20261007000336__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 (300) hide show
  1. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/PKG-INFO +1 -1
  2. haystack_ai-3.4.0.dev20261007000336/VERSION.txt +1 -0
  3. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/agents/agent.py +31 -12
  4. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/agents/utils.py +1 -1
  5. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/builders/chat_prompt_builder.py +8 -16
  6. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/builders/prompt_builder.py +2 -2
  7. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/extractors/image/llm_document_content_extractor.py +10 -8
  8. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/extractors/llm_metadata_extractor.py +9 -10
  9. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/generators/chat/azure.py +5 -14
  10. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/generators/chat/llm.py +2 -2
  11. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/generators/chat/openai.py +5 -13
  12. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/generators/chat/openai_responses.py +5 -17
  13. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/joiners/answer_joiner.py +3 -3
  14. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/joiners/branch.py +6 -6
  15. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/joiners/list_joiner.py +3 -3
  16. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/joiners/string_joiner.py +0 -3
  17. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/query/query_expander.py +45 -12
  18. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/rankers/llm_ranker.py +52 -25
  19. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/validators/json_schema.py +4 -2
  20. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/pipeline/pipeline.py +10 -15
  21. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/super_component/super_component.py +2 -2
  22. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/dataclasses/chat_message.py +164 -6
  23. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/budget/hooks.py +2 -2
  24. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/from_function.py +6 -2
  25. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/human_in_the_loop/hooks.py +2 -2
  26. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/tool_result_offloading/hooks.py +2 -2
  27. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/token_counters/openai_counter.py +1 -1
  28. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tools/__init__.py +4 -1
  29. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tools/component_tool.py +25 -11
  30. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tools/pipeline_tool.py +2 -2
  31. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tools/searchable_toolset.py +47 -16
  32. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tools/skills/skill_toolset.py +9 -2
  33. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tools/tool.py +18 -20
  34. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tools/toolset.py +5 -37
  35. haystack_ai-3.4.0.dev20261007000336/haystack/tools/utils.py +116 -0
  36. haystack_ai-3.4.0.dev20261005000357/VERSION.txt +0 -1
  37. haystack_ai-3.4.0.dev20261005000357/haystack/tools/utils.py +0 -64
  38. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/.gitignore +0 -0
  39. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/LICENSE +0 -0
  40. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/README.md +0 -0
  41. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/__init__.py +0 -0
  42. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/__init__.py +0 -0
  43. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/agents/__init__.py +0 -0
  44. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/agents/state/__init__.py +0 -0
  45. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/agents/state/state.py +0 -0
  46. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/agents/state/state_utils.py +0 -0
  47. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/agents/tool_calling.py +0 -0
  48. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/builders/__init__.py +0 -0
  49. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/builders/answer_builder.py +0 -0
  50. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/caching/__init__.py +0 -0
  51. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/caching/cache_checker.py +0 -0
  52. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/__init__.py +0 -0
  53. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/csv.py +0 -0
  54. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/docx.py +0 -0
  55. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/file_to_file_content.py +0 -0
  56. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/html.py +0 -0
  57. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/image/__init__.py +0 -0
  58. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/image/document_to_image.py +0 -0
  59. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/image/file_to_document.py +0 -0
  60. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/image/file_to_image.py +0 -0
  61. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/image/image_utils.py +0 -0
  62. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/image/pdf_to_image.py +0 -0
  63. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/json.py +0 -0
  64. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/markdown.py +0 -0
  65. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/msg.py +0 -0
  66. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/multi_file_converter.py +0 -0
  67. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/output_adapter.py +0 -0
  68. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/pdfminer.py +0 -0
  69. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/pptx.py +0 -0
  70. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/pypdf.py +0 -0
  71. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/txt.py +0 -0
  72. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/utils.py +0 -0
  73. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/converters/xlsx.py +0 -0
  74. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/embedders/__init__.py +0 -0
  75. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/embedders/azure_document_embedder.py +0 -0
  76. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/embedders/azure_text_embedder.py +0 -0
  77. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/embedders/mock_document_embedder.py +0 -0
  78. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/embedders/mock_text_embedder.py +0 -0
  79. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/embedders/mock_utils.py +0 -0
  80. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/embedders/openai_document_embedder.py +0 -0
  81. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/embedders/openai_text_embedder.py +0 -0
  82. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/embedders/types/__init__.py +0 -0
  83. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/embedders/types/protocol.py +0 -0
  84. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/evaluators/__init__.py +0 -0
  85. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/evaluators/answer_exact_match.py +0 -0
  86. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/evaluators/context_relevance.py +0 -0
  87. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/evaluators/document_map.py +0 -0
  88. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/evaluators/document_mrr.py +0 -0
  89. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/evaluators/document_ndcg.py +0 -0
  90. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/evaluators/document_recall.py +0 -0
  91. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/evaluators/faithfulness.py +0 -0
  92. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/evaluators/llm_evaluator.py +0 -0
  93. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/evaluators/sas_evaluator.py +0 -0
  94. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/extractors/__init__.py +0 -0
  95. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/extractors/image/__init__.py +0 -0
  96. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/extractors/regex_text_extractor.py +0 -0
  97. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/fetchers/__init__.py +0 -0
  98. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/fetchers/link_content.py +0 -0
  99. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/generators/__init__.py +0 -0
  100. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/generators/chat/__init__.py +0 -0
  101. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/generators/chat/azure_responses.py +0 -0
  102. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/generators/chat/fallback.py +0 -0
  103. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/generators/chat/mock.py +0 -0
  104. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/generators/chat/types/__init__.py +0 -0
  105. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/generators/chat/types/protocol.py +0 -0
  106. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/generators/openai_image_generator.py +0 -0
  107. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/generators/utils.py +0 -0
  108. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/joiners/__init__.py +0 -0
  109. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/joiners/document_joiner.py +0 -0
  110. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/preprocessors/__init__.py +0 -0
  111. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/preprocessors/_page_numbers.py +0 -0
  112. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/preprocessors/csv_document_cleaner.py +0 -0
  113. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/preprocessors/csv_document_splitter.py +0 -0
  114. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/preprocessors/document_cleaner.py +0 -0
  115. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/preprocessors/document_preprocessor.py +0 -0
  116. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/preprocessors/document_splitter.py +0 -0
  117. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/preprocessors/embedding_based_document_splitter.py +0 -0
  118. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/preprocessors/hierarchical_document_splitter.py +0 -0
  119. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/preprocessors/markdown_header_splitter.py +0 -0
  120. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/preprocessors/python_code_splitter.py +0 -0
  121. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/preprocessors/recursive_splitter.py +0 -0
  122. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/preprocessors/sentence_tokenizer.py +0 -0
  123. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/preprocessors/text_cleaner.py +0 -0
  124. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/query/__init__.py +0 -0
  125. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/rankers/__init__.py +0 -0
  126. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/rankers/lost_in_the_middle.py +0 -0
  127. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/rankers/meta_field.py +0 -0
  128. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/rankers/meta_field_grouping_ranker.py +0 -0
  129. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/retrievers/__init__.py +0 -0
  130. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/retrievers/auto_merging_retriever.py +0 -0
  131. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/retrievers/filter_retriever.py +0 -0
  132. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/retrievers/in_memory/__init__.py +0 -0
  133. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/retrievers/in_memory/bm25_retriever.py +0 -0
  134. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/retrievers/in_memory/embedding_retriever.py +0 -0
  135. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/retrievers/multi_query_embedding_retriever.py +0 -0
  136. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/retrievers/multi_query_text_retriever.py +0 -0
  137. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/retrievers/multi_retriever.py +0 -0
  138. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/retrievers/sentence_window_retriever.py +0 -0
  139. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/retrievers/text_embedding_retriever.py +0 -0
  140. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/retrievers/types/__init__.py +0 -0
  141. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/retrievers/types/protocol.py +0 -0
  142. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/routers/__init__.py +0 -0
  143. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/routers/conditional_router.py +0 -0
  144. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/routers/document_length_router.py +0 -0
  145. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/routers/document_type_router.py +0 -0
  146. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/routers/file_type_router.py +0 -0
  147. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/routers/llm_messages_router.py +0 -0
  148. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/routers/metadata_router.py +0 -0
  149. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/samplers/__init__.py +0 -0
  150. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/samplers/top_p.py +0 -0
  151. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/validators/__init__.py +0 -0
  152. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/writers/__init__.py +0 -0
  153. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/components/writers/document_writer.py +0 -0
  154. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/__init__.py +0 -0
  155. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/component/__init__.py +0 -0
  156. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/component/component.py +0 -0
  157. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/component/sockets.py +0 -0
  158. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/component/types.py +0 -0
  159. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/errors.py +0 -0
  160. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/pipeline/__init__.py +0 -0
  161. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/pipeline/base.py +0 -0
  162. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/pipeline/breakpoint.py +0 -0
  163. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/pipeline/component_checks.py +0 -0
  164. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/pipeline/descriptions.py +0 -0
  165. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/pipeline/draw.py +0 -0
  166. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/pipeline/utils.py +0 -0
  167. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/serialization.py +0 -0
  168. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/serialization_security.py +0 -0
  169. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/super_component/__init__.py +0 -0
  170. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/super_component/utils.py +0 -0
  171. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/core/type_utils.py +0 -0
  172. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/data/abbreviations/de.txt +0 -0
  173. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/data/abbreviations/en.txt +0 -0
  174. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/dataclasses/__init__.py +0 -0
  175. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/dataclasses/answer.py +0 -0
  176. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/dataclasses/breakpoints.py +0 -0
  177. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/dataclasses/byte_stream.py +0 -0
  178. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/dataclasses/document.py +0 -0
  179. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/dataclasses/file_content.py +0 -0
  180. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/dataclasses/image_content.py +0 -0
  181. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/dataclasses/skill_info.py +0 -0
  182. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/dataclasses/sparse_embedding.py +0 -0
  183. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/dataclasses/streaming_chunk.py +0 -0
  184. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/document_stores/__init__.py +0 -0
  185. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/document_stores/errors/__init__.py +0 -0
  186. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/document_stores/errors/errors.py +0 -0
  187. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/document_stores/in_memory/__init__.py +0 -0
  188. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/document_stores/in_memory/document_store.py +0 -0
  189. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/document_stores/types/__init__.py +0 -0
  190. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/document_stores/types/filter_policy.py +0 -0
  191. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/document_stores/types/policy.py +0 -0
  192. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/document_stores/types/protocol.py +0 -0
  193. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/errors.py +0 -0
  194. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/evaluation/__init__.py +0 -0
  195. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/evaluation/eval_run_result.py +0 -0
  196. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/__init__.py +0 -0
  197. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/budget/__init__.py +0 -0
  198. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/compaction/AGENTS.md +0 -0
  199. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/compaction/CLAUDE.md +0 -0
  200. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/compaction/__init__.py +0 -0
  201. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/compaction/hooks.py +0 -0
  202. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/compaction/sliding_window.py +0 -0
  203. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/compaction/summarization.py +0 -0
  204. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/compaction/tool_result_pruning.py +0 -0
  205. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/compaction/types/__init__.py +0 -0
  206. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/compaction/types/protocol.py +0 -0
  207. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/compaction/utils.py +0 -0
  208. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/human_in_the_loop/__init__.py +0 -0
  209. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/human_in_the_loop/dataclasses.py +0 -0
  210. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/human_in_the_loop/policies.py +0 -0
  211. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/human_in_the_loop/strategies.py +0 -0
  212. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/human_in_the_loop/types/__init__.py +0 -0
  213. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/human_in_the_loop/types/protocol.py +0 -0
  214. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/human_in_the_loop/user_interfaces.py +0 -0
  215. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/invocation.py +0 -0
  216. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/protocol.py +0 -0
  217. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/tool_result_offloading/__init__.py +0 -0
  218. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/tool_result_offloading/policies.py +0 -0
  219. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/tool_result_offloading/stores.py +0 -0
  220. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/tool_result_offloading/types/__init__.py +0 -0
  221. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/tool_result_offloading/types/protocol.py +0 -0
  222. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/hooks/utils.py +0 -0
  223. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/lazy_imports.py +0 -0
  224. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/logging.py +0 -0
  225. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/marshal/__init__.py +0 -0
  226. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/marshal/protocol.py +0 -0
  227. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/marshal/yaml.py +0 -0
  228. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/py.typed +0 -0
  229. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/skill_stores/__init__.py +0 -0
  230. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/skill_stores/file_system/__init__.py +0 -0
  231. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/skill_stores/file_system/skill_store.py +0 -0
  232. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/skill_stores/types/__init__.py +0 -0
  233. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/skill_stores/types/protocol.py +0 -0
  234. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/telemetry/__init__.py +0 -0
  235. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/telemetry/_environment.py +0 -0
  236. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/telemetry/_telemetry.py +0 -0
  237. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/__init__.py +0 -0
  238. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/callable_serialization/random_callable.py +0 -0
  239. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/document_store.py +0 -0
  240. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/document_store_async.py +0 -0
  241. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/factory.py +0 -0
  242. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/sample_components/__init__.py +0 -0
  243. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/sample_components/accumulate.py +0 -0
  244. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/sample_components/add_value.py +0 -0
  245. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/sample_components/concatenate.py +0 -0
  246. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/sample_components/double.py +0 -0
  247. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/sample_components/fstring.py +0 -0
  248. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/sample_components/future_annotations.py +0 -0
  249. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/sample_components/greet.py +0 -0
  250. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/sample_components/hello.py +0 -0
  251. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/sample_components/joiner.py +0 -0
  252. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/sample_components/parity.py +0 -0
  253. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/sample_components/remainder.py +0 -0
  254. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/sample_components/repeat.py +0 -0
  255. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/sample_components/subtract.py +0 -0
  256. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/sample_components/sum.py +0 -0
  257. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/sample_components/text_splitter.py +0 -0
  258. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/sample_components/threshold.py +0 -0
  259. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/telemetry.py +0 -0
  260. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/testing/test_utils.py +0 -0
  261. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/token_counters/__init__.py +0 -0
  262. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/token_counters/approximate_counter.py +0 -0
  263. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/token_counters/tiktoken_counter.py +0 -0
  264. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/token_counters/types/__init__.py +0 -0
  265. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/token_counters/types/protocol.py +0 -0
  266. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/token_counters/utils.py +0 -0
  267. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tools/agent_tool.py +0 -0
  268. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tools/errors.py +0 -0
  269. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tools/from_function.py +0 -0
  270. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tools/parameters_schema_utils.py +0 -0
  271. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tools/serde_utils.py +0 -0
  272. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tools/skills/__init__.py +0 -0
  273. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tools/tool_types.py +0 -0
  274. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tracing/__init__.py +0 -0
  275. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tracing/logging_tracer.py +0 -0
  276. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tracing/tracer.py +0 -0
  277. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/tracing/utils.py +0 -0
  278. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/__init__.py +0 -0
  279. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/async_utils.py +0 -0
  280. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/auth.py +0 -0
  281. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/azure.py +0 -0
  282. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/base_serialization.py +0 -0
  283. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/callable_serialization.py +0 -0
  284. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/dataclasses.py +0 -0
  285. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/deserialization.py +0 -0
  286. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/device.py +0 -0
  287. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/experimental.py +0 -0
  288. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/filters.py +0 -0
  289. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/hf.py +0 -0
  290. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/http_client.py +0 -0
  291. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/jinja2_chat_extension.py +0 -0
  292. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/jinja2_extensions.py +0 -0
  293. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/jinja2_sandbox.py +0 -0
  294. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/jupyter.py +0 -0
  295. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/misc.py +0 -0
  296. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/requests_utils.py +0 -0
  297. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/type_serialization.py +0 -0
  298. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/utils/url_validation.py +0 -0
  299. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/haystack/version.py +0 -0
  300. {haystack_ai-3.4.0.dev20261005000357 → haystack_ai-3.4.0.dev20261007000336}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: haystack-ai
3
- Version: 3.4.0.dev20261005000357
3
+ Version: 3.4.0.dev20261007000336
4
4
  Summary: LLM framework to build customizable, production-ready LLM applications. Connect components (models, vector DBs, file converters) to pipelines or agents that can interact with your data.
5
5
  Project-URL: CI: GitHub, https://github.com/deepset-ai/haystack/actions
6
6
  Project-URL: Docs: RTD, https://haystack.deepset.ai/overview/intro
@@ -0,0 +1 @@
1
+ 3.4.0.dev20261007000336
@@ -54,10 +54,13 @@ from haystack.tools import (
54
54
  Toolset,
55
55
  ToolsType,
56
56
  _check_duplicate_tool_names,
57
+ close_tools,
58
+ close_tools_async,
57
59
  deserialize_tools_or_toolset_inplace,
58
60
  flatten_tools_or_toolsets,
59
61
  serialize_tools_or_toolset,
60
62
  warm_up_tools,
63
+ warm_up_tools_async,
61
64
  )
62
65
  from haystack.utils.async_utils import _execute_component_async
63
66
  from haystack.utils.callable_serialization import deserialize_callable, serialize_callable
@@ -241,7 +244,7 @@ class Agent:
241
244
 
242
245
  ```python
243
246
  from haystack.components.agents import Agent
244
- from haystack.components.generators.chat import OpenAIChatGenerator
247
+ from haystack.components.generators.chat import OpenAIResponsesChatGenerator
245
248
  from haystack.components.generators.utils import print_streaming_chunk
246
249
  from haystack.dataclasses import ChatMessage
247
250
  from haystack.tools import tool
@@ -272,7 +275,7 @@ class Agent:
272
275
  "You are a helpful assistant. Use the 'search' tool to find information "
273
276
  "about a user's question and the 'calculator' tool to perform math."
274
277
  ),
275
- chat_generator=OpenAIChatGenerator(),
278
+ chat_generator=OpenAIResponsesChatGenerator(),
276
279
  tools=[search, calculator],
277
280
  streaming_callback=print_streaming_chunk,
278
281
  )
@@ -293,7 +296,7 @@ class Agent:
293
296
 
294
297
  ```python
295
298
  from haystack.components.agents import Agent
296
- from haystack.components.generators.chat import OpenAIChatGenerator
299
+ from haystack.components.generators.chat import OpenAIResponsesChatGenerator
297
300
  from haystack.tools import tool
298
301
  from typing import Annotated
299
302
 
@@ -308,7 +311,7 @@ class Agent:
308
311
  return f"[Translated '{text}' to {target_language}]"
309
312
 
310
313
  agent = Agent(
311
- chat_generator=OpenAIChatGenerator(),
314
+ chat_generator=OpenAIResponsesChatGenerator(),
312
315
  tools=[translate],
313
316
  system_prompt="You are a helpful translation assistant.",
314
317
  user_prompt=\"\"\"{% message role="user"%}
@@ -347,7 +350,7 @@ class Agent:
347
350
  ```python
348
351
  from haystack.components.agents import Agent
349
352
  from haystack.components.agents.state import State
350
- from haystack.components.generators.chat import OpenAIChatGenerator
353
+ from haystack.components.generators.chat import OpenAIResponsesChatGenerator
351
354
  from haystack.dataclasses import ChatMessage
352
355
  from haystack.hooks import hook
353
356
  from haystack.tools import tool
@@ -369,7 +372,7 @@ class Agent:
369
372
 
370
373
 
371
374
  agent = Agent(
372
- chat_generator=OpenAIChatGenerator(),
375
+ chat_generator=OpenAIResponsesChatGenerator(),
373
376
  tools=[save_result],
374
377
  hooks={"on_exit": [require_save]},
375
378
  )
@@ -601,7 +604,7 @@ class Agent:
601
604
 
602
605
  async def warm_up_async(self) -> None:
603
606
  """Warm up the tools, hooks, and the underlying chat generator on the serving event loop."""
604
- warm_up_tools(tools=self.tools)
607
+ await warm_up_tools_async(tools=self.tools)
605
608
  await warm_up_hooks_async(self.hooks)
606
609
  if hasattr(self.chat_generator, "warm_up_async"):
607
610
  await self.chat_generator.warm_up_async()
@@ -609,13 +612,15 @@ class Agent:
609
612
  self.chat_generator.warm_up()
610
613
 
611
614
  def close(self) -> None:
612
- """Release the hooks' and the underlying chat generator's resources."""
615
+ """Release tools, hooks, and chat generator resources."""
616
+ close_tools(tools=self.tools)
613
617
  close_hooks(self.hooks)
614
618
  if hasattr(self.chat_generator, "close"):
615
619
  self.chat_generator.close()
616
620
 
617
621
  async def close_async(self) -> None:
618
- """Release the hooks' and the underlying chat generator's async resources."""
622
+ """Release async tools, hooks, and chat generator resources."""
623
+ await close_tools_async(tools=self.tools)
619
624
  await close_hooks_async(self.hooks)
620
625
  if hasattr(self.chat_generator, "close_async"):
621
626
  await self.chat_generator.close_async()
@@ -817,9 +822,6 @@ class Agent:
817
822
 
818
823
  if isinstance(tools, (Toolset, list)):
819
824
  selected = cast(ToolsType, tools) # mypy can't narrow the Union type from the isinstance checks
820
- # Per-run tools are not covered by the Agent's own warm_up(), so warm them up here.
821
- # warm_up() is expected to be idempotent, so re-warming on every run is cheap.
822
- warm_up_tools(tools=selected)
823
825
  return _spawn_tools(tools=selected)
824
826
 
825
827
  raise TypeError(
@@ -847,6 +849,8 @@ class Agent:
847
849
  precedence, keys set only at initialization are kept.
848
850
  :param tools: Optional list of Tool objects, a Toolset, or list of tool names to use for this run.
849
851
  When passing tool names, tools are selected from the Agent's originally configured tools.
852
+ Tool and Toolset objects passed here are warmed up automatically; the caller is responsible for
853
+ closing them if they hold resources.
850
854
  :param hook_context: Optional dictionary of request-scoped resources made available to hooks via
851
855
  `state.data.get("hook_context")`. Useful in web/server environments to provide per-request objects
852
856
  (e.g., WebSocket connections, async queues, Redis pub/sub clients) that a hook can use, for
@@ -874,6 +878,12 @@ class Agent:
874
878
  """
875
879
  agent_inputs = {"messages": messages, "streaming_callback": streaming_callback, **kwargs}
876
880
  self.warm_up()
881
+ # warm up tools passed at runtime
882
+ if isinstance(tools, Toolset):
883
+ tools_to_warm_up: ToolsType = tools
884
+ else:
885
+ tools_to_warm_up = [tool for tool in tools or [] if not isinstance(tool, str)]
886
+ warm_up_tools(tools=tools_to_warm_up)
877
887
 
878
888
  exe_context = self._initialize_fresh_execution(
879
889
  messages=messages,
@@ -934,6 +944,9 @@ class Agent:
934
944
  with the `generation_kwargs` passed at the chat generator's initialization: keys provided here take
935
945
  precedence, keys set only at initialization are kept.
936
946
  :param tools: Optional list of Tool objects, a Toolset, or list of tool names to use for this run.
947
+ When passing tool names, tools are selected from the Agent's originally configured tools.
948
+ Tool and Toolset objects passed here are warmed up automatically; the caller is responsible for
949
+ closing them if they hold resources.
937
950
  :param hook_context: Optional dictionary of request-scoped resources made available to hooks via
938
951
  `state.data.get("hook_context")`. Useful in web/server environments to provide per-request objects
939
952
  (e.g., WebSocket connections, async queues, Redis pub/sub clients) that a hook can use, for
@@ -961,6 +974,12 @@ class Agent:
961
974
  """
962
975
  agent_inputs = {"messages": messages, "streaming_callback": streaming_callback, **kwargs}
963
976
  await self.warm_up_async()
977
+ # warm up tools passed at runtime
978
+ if isinstance(tools, Toolset):
979
+ tools_to_warm_up: ToolsType = tools
980
+ else:
981
+ tools_to_warm_up = [tool for tool in tools or [] if not isinstance(tool, str)]
982
+ await warm_up_tools_async(tools=tools_to_warm_up)
964
983
 
965
984
  exe_context = self._initialize_fresh_execution(
966
985
  messages=messages,
@@ -115,7 +115,7 @@ def _select_tools_by_name(configured_tools: ToolsType, names: list[str]) -> list
115
115
  Standalone Tools are kept when their name is requested. A Toolset with run-scoped state (one overriding
116
116
  `spawn()`, such as SearchableToolset) is replaced by a per-run copy carrying the requested names, so its
117
117
  dynamic behavior (search/lazy-loading) is preserved without mutating the shared, configured Toolset. Any
118
- other Toolset is warmed up and reduced to the matching Tools.
118
+ other Toolset is reduced to the matching Tools. The caller must warm up the tools before selection.
119
119
 
120
120
  :param configured_tools: The tools configured on the Agent.
121
121
  :param names: The requested tool names.
@@ -68,13 +68,13 @@ class ChatPromptBuilder:
68
68
 
69
69
  ```python
70
70
  from haystack.components.builders import ChatPromptBuilder
71
- from haystack.components.generators.chat import OpenAIChatGenerator
71
+ from haystack.components.generators.chat import OpenAIResponsesChatGenerator
72
72
  from haystack.dataclasses import ChatMessage
73
73
  from haystack import Pipeline
74
74
 
75
75
  # no parameter init, we don't use any runtime template variables
76
76
  prompt_builder = ChatPromptBuilder()
77
- llm = OpenAIChatGenerator(model="gpt-5-mini")
77
+ llm = OpenAIResponsesChatGenerator(model="gpt-5.6-luna")
78
78
 
79
79
  pipe = Pipeline()
80
80
  pipe.add_component("prompt_builder", prompt_builder)
@@ -88,26 +88,18 @@ class ChatPromptBuilder:
88
88
 
89
89
  res = pipe.run(data={"prompt_builder": {"template_variables": {"location": location, "language": language},
90
90
  "template": messages}})
91
- print(res)
92
- # >> {'llm': {'replies': [ChatMessage(_role=<ChatRole.ASSISTANT: 'assistant'>, _content=[TextContent(text=
93
- # "Berlin is the capital city of Germany and one of the most vibrant
94
- # and diverse cities in Europe. Here are some key things to know...Enjoy your time exploring the vibrant and dynamic
95
- # capital of Germany!")], _name=None, _meta={'model': 'gpt-5-mini',
96
- # 'index': 0, 'finish_reason': 'stop', 'usage': {'prompt_tokens': 27, 'completion_tokens': 681, 'total_tokens':
97
- # 708}})]}}
91
+ print(res["llm"]["replies"][0].text)
92
+ # >> Berlin is the capital city of Germany and one of the most vibrant and diverse cities in Europe. Here are some
93
+ # >> key things to know...Enjoy your time exploring the vibrant and dynamic capital of Germany!
98
94
 
99
95
  messages = [system_message, ChatMessage.from_user("What's the weather forecast for {{location}} in the next {{day_count}} days?")]
100
96
 
101
97
  res = pipe.run(data={"prompt_builder": {"template_variables": {"location": location, "day_count": "5"},
102
98
  "template": messages}})
103
99
 
104
- print(res)
105
- # >> {'llm': {'replies': [ChatMessage(_role=<ChatRole.ASSISTANT: 'assistant'>, _content=[TextContent(text=
106
- # "Here is the weather forecast for Berlin in the next 5
107
- # days:\\n\\nDay 1: Mostly cloudy with a high of 22°C (72°F) and...so it's always a good idea to check for updates
108
- # closer to your visit.")], _name=None, _meta={'model': 'gpt-5-mini',
109
- # 'index': 0, 'finish_reason': 'stop', 'usage': {'prompt_tokens': 37, 'completion_tokens': 201,
110
- # 'total_tokens': 238}})]}}
100
+ print(res["llm"]["replies"][0].text)
101
+ # >> Here is the weather forecast for Berlin in the next 5 days: Day 1: Mostly cloudy with a high of 22°C (72°F)
102
+ # >> and...so it's always a good idea to check for updates closer to your visit.
111
103
  ```
112
104
 
113
105
  #### String prompt template
@@ -47,7 +47,7 @@ class PromptBuilder:
47
47
  ```python
48
48
  from haystack import Pipeline, Document
49
49
  from haystack.utils import Secret
50
- from haystack.components.generators.chat import OpenAIChatGenerator
50
+ from haystack.components.generators.chat import OpenAIResponsesChatGenerator
51
51
  from haystack.components.builders.prompt_builder import PromptBuilder
52
52
 
53
53
  # in a real world use case documents could come from a retriever, web, or any other source
@@ -64,7 +64,7 @@ class PromptBuilder:
64
64
  \"\"\"
65
65
  p = Pipeline()
66
66
  p.add_component(instance=PromptBuilder(template=prompt_template), name="prompt_builder")
67
- p.add_component(instance=OpenAIChatGenerator(api_key=Secret.from_env_var("OPENAI_API_KEY")), name="llm")
67
+ p.add_component(instance=OpenAIResponsesChatGenerator(api_key=Secret.from_env_var("OPENAI_API_KEY")), name="llm")
68
68
  p.connect("prompt_builder", "llm")
69
69
 
70
70
  question = "Where does Joe live?"
@@ -74,8 +74,8 @@ class LLMDocumentContentExtractor:
74
74
  - If the LLM returns a **JSON object with multiple keys**, the value of ``document_content`` (if present) is
75
75
  written to content and all other keys are merged into the document's metadata.
76
76
 
77
- The ChatGenerator can be configured to return JSON (e.g. ``response_format={"type": "json_object"}``
78
- in ``generation_kwargs``).
77
+ The ChatGenerator can be configured to return JSON. For example, with the OpenAIResponsesChatGenerator, pass
78
+ `{"text": {"format": {"type": "json_schema", ...}}}` in `generation_kwargs` as shown in the usage example below.
79
79
 
80
80
  Documents that fail extraction are returned in ``failed_documents`` with ``content_extraction_error`` in metadata.
81
81
 
@@ -83,7 +83,7 @@ class LLMDocumentContentExtractor:
83
83
 
84
84
  ```python
85
85
  from haystack import Document
86
- from haystack.components.generators.chat import OpenAIChatGenerator
86
+ from haystack.components.generators.chat import OpenAIResponsesChatGenerator
87
87
  from haystack.components.extractors.image import LLMDocumentContentExtractor
88
88
 
89
89
  prompt = \"\"\"
@@ -95,12 +95,13 @@ class LLMDocumentContentExtractor:
95
95
  Return this metadata as additional key-value pairs in the same JSON object.
96
96
  \"\"\"
97
97
 
98
- chat_generator = OpenAIChatGenerator(
98
+ chat_generator = OpenAIResponsesChatGenerator(
99
99
  generation_kwargs={
100
- "response_format": {
101
- "type": "json_schema",
102
- "json_schema": {
100
+ "text": {
101
+ "format": {
102
+ "type": "json_schema",
103
103
  "name": "entity_extraction",
104
+ "strict": False,
104
105
  "schema": {
105
106
  "type": "object",
106
107
  "properties": {
@@ -148,7 +149,8 @@ class LLMDocumentContentExtractor:
148
149
  Initialize the LLMDocumentContentExtractor component.
149
150
 
150
151
  :param chat_generator: A ChatGenerator that supports vision input. Optionally configured for JSON
151
- (e.g. ``response_format={"type": "json_object"}`` in ``generation_kwargs``).
152
+ (e.g. `{"text": {"format": {"type": "json_schema", ...}}}` in `generation_kwargs` when using the
153
+ OpenAIResponsesChatGenerator).
152
154
  :param prompt: Prompt for extraction. Must not contain Jinja variables.
153
155
  :param file_path_meta_field: The metadata field in the Document that contains the file path to the image or PDF.
154
156
  :param root_path: The root directory path where document files are located. If provided, file paths in
@@ -46,7 +46,7 @@ class LLMMetadataExtractor:
46
46
  ```python
47
47
  from haystack import Document
48
48
  from haystack.components.extractors.llm_metadata_extractor import LLMMetadataExtractor
49
- from haystack.components.generators.chat import OpenAIChatGenerator
49
+ from haystack.components.generators.chat import OpenAIResponsesChatGenerator
50
50
 
51
51
  NER_PROMPT = '''
52
52
  -Goal-
@@ -92,15 +92,13 @@ class LLMMetadataExtractor:
92
92
  Document(content="Hugging Face is a company that was founded in New York, USA and is known for its Transformers library")
93
93
  ]
94
94
 
95
- chat_generator = OpenAIChatGenerator(
95
+ chat_generator = OpenAIResponsesChatGenerator(
96
96
  generation_kwargs={
97
- "max_completion_tokens": 500,
98
- "temperature": 0.0,
99
- "seed": 0,
100
- "response_format": {
101
- "type": "json_schema",
102
- "json_schema": {
97
+ "text": {
98
+ "format": {
99
+ "type": "json_schema",
103
100
  "name": "entity_extraction",
101
+ "strict": True,
104
102
  "schema": {
105
103
  "type": "object",
106
104
  "properties": {
@@ -167,8 +165,9 @@ class LLMMetadataExtractor:
167
165
  which points to a single document in the list of documents. For example, to access the content of the
168
166
  document, use `{{ document.content }}` in the prompt.
169
167
  :param chat_generator: a ChatGenerator instance which represents the LLM. In order for the component to work,
170
- the LLM should be configured to return a JSON object. For example, when using the OpenAIChatGenerator, you
171
- should pass `{"response_format": {"type": "json_object"}}` in the `generation_kwargs`.
168
+ the LLM should be configured to return a JSON object. For example, when using the
169
+ OpenAIResponsesChatGenerator, you should pass `{"text": {"format": {"type": "json_schema", ...}}}` in the
170
+ `generation_kwargs`.
172
171
  :param expected_keys: The keys expected in the JSON output from the LLM.
173
172
  :param page_range: A range of pages to extract metadata from. For example, page_range=['1', '3'] will extract
174
173
  metadata from the first and third pages of each document. It also accepts printable range strings, e.g.:
@@ -18,7 +18,6 @@ from haystack.tools import (
18
18
  deserialize_tools_or_toolset_inplace,
19
19
  flatten_tools_or_toolsets,
20
20
  serialize_tools_or_toolset,
21
- warm_up_tools,
22
21
  )
23
22
  from haystack.utils import Secret, deserialize_callable, serialize_callable
24
23
  from haystack.utils.http_client import init_http_client
@@ -29,7 +28,7 @@ class AzureOpenAIChatGenerator(OpenAIChatGenerator):
29
28
  """
30
29
  Generates text using OpenAI's models on Azure.
31
30
 
32
- It works with the gpt-4 - type models and supports streaming responses
31
+ It works with OpenAI's GPT models deployed on Azure and supports streaming responses
33
32
  from OpenAI API. It uses [ChatMessage](https://docs.haystack.deepset.ai/docs/chatmessage)
34
33
  format in input and output.
35
34
 
@@ -53,7 +52,7 @@ class AzureOpenAIChatGenerator(OpenAIChatGenerator):
53
52
  client = AzureOpenAIChatGenerator(
54
53
  azure_endpoint="<Your Azure endpoint e.g. `https://your-company.azure.openai.com/>",
55
54
  api_key=Secret.from_token("<your-api-key>"),
56
- azure_deployment="<this is a model name, e.g. gpt-4.1-mini>")
55
+ azure_deployment="<this is a model name, e.g. gpt-5.6-luna>")
57
56
  response = client.run(messages)
58
57
  print(response)
59
58
  ```
@@ -64,7 +63,7 @@ class AzureOpenAIChatGenerator(OpenAIChatGenerator):
64
63
  "Natural Language Processing (NLP) is a branch of artificial intelligence that focuses on
65
64
  enabling computers to understand, interpret, and generate human language in a way that is useful.")],
66
65
  _name=None,
67
- _meta={'model': 'gpt-4.1-mini', 'index': 0, 'finish_reason': 'stop',
66
+ _meta={'model': 'gpt-5.6-luna', 'index': 0, 'finish_reason': 'stop',
68
67
  'usage': {'prompt_tokens': 15, 'completion_tokens': 36, 'total_tokens': 51}})]
69
68
  }
70
69
  ```
@@ -234,7 +233,6 @@ class AzureOpenAIChatGenerator(OpenAIChatGenerator):
234
233
 
235
234
  self.client: AzureOpenAI | None = None
236
235
  self.async_client: AsyncAzureOpenAI | None = None
237
- self._tools_warmed_up = False
238
236
 
239
237
  def _client_kwargs(self) -> dict[str, Any]:
240
238
  timeout = self.timeout if self.timeout is not None else float(os.environ.get("OPENAI_TIMEOUT", "30.0"))
@@ -260,16 +258,10 @@ class AzureOpenAIChatGenerator(OpenAIChatGenerator):
260
258
  "azure_ad_token_provider": self.azure_ad_token_provider,
261
259
  }
262
260
 
263
- def _warm_up_tools(self) -> None:
264
- if not self._tools_warmed_up:
265
- warm_up_tools(self.tools)
266
- self._tools_warmed_up = True
267
-
268
261
  def warm_up(self) -> None:
269
262
  """
270
- Warm up the tools and initialize the synchronous Azure OpenAI client.
263
+ Initialize the synchronous Azure OpenAI client.
271
264
  """
272
- self._warm_up_tools()
273
265
  if self.client is None:
274
266
  # openai>=3 annotates http_client as httpx2, but legacy httpx clients are supported at runtime.
275
267
  # https://github.com/openai/openai-python/blob/main/httpx2.md
@@ -281,9 +273,8 @@ class AzureOpenAIChatGenerator(OpenAIChatGenerator):
281
273
 
282
274
  async def warm_up_async(self) -> None: # noqa: RUF029
283
275
  """
284
- Warm up the tools and initialize the asynchronous Azure OpenAI client on the serving event loop.
276
+ Initialize the asynchronous Azure OpenAI client on the serving event loop.
285
277
  """
286
- self._warm_up_tools()
287
278
  if self.async_client is None:
288
279
  # openai>=3 annotates http_client as httpx2, but legacy httpx clients are supported at runtime.
289
280
  # https://github.com/openai/openai-python/blob/main/httpx2.md
@@ -26,10 +26,10 @@ class LLM(Agent):
26
26
  ### Usage examples
27
27
  ```python
28
28
  from haystack.components.generators.chat import LLM
29
- from haystack.components.generators.chat import OpenAIChatGenerator
29
+ from haystack.components.generators.chat import OpenAIResponsesChatGenerator
30
30
 
31
31
  llm = LLM(
32
- chat_generator=OpenAIChatGenerator(),
32
+ chat_generator=OpenAIResponsesChatGenerator(),
33
33
  system_prompt="You are a helpful translation assistant.",
34
34
  user_prompt="Summarize the following document: {{ document }}",
35
35
  required_variables=["document"],
@@ -39,6 +39,7 @@ from haystack.dataclasses import (
39
39
  ToolCallDelta,
40
40
  select_streaming_callback,
41
41
  )
42
+ from haystack.dataclasses.chat_message import _parse_openai_tool_call_arguments
42
43
  from haystack.dataclasses.streaming_chunk import _invoke_streaming_callback
43
44
  from haystack.tools import (
44
45
  ToolsType,
@@ -46,7 +47,6 @@ from haystack.tools import (
46
47
  deserialize_tools_or_toolset_inplace,
47
48
  flatten_tools_or_toolsets,
48
49
  serialize_tools_or_toolset,
49
- warm_up_tools,
50
50
  )
51
51
  from haystack.utils import Secret, deserialize_callable, serialize_callable
52
52
  from haystack.utils.http_client import init_http_client
@@ -59,7 +59,7 @@ class OpenAIChatGenerator:
59
59
  """
60
60
  Completes chats using OpenAI's large language models (LLMs).
61
61
 
62
- It works with the gpt-4 and gpt-5 series models and supports streaming responses
62
+ It works with OpenAI's GPT models through the Chat Completions API and supports streaming responses
63
63
  from OpenAI API. It uses [ChatMessage](https://docs.haystack.deepset.ai/docs/chatmessage)
64
64
  format in input and output.
65
65
 
@@ -211,7 +211,6 @@ class OpenAIChatGenerator:
211
211
 
212
212
  self.client: OpenAI | None = None
213
213
  self.async_client: AsyncOpenAI | None = None
214
- self._tools_warmed_up = False
215
214
 
216
215
  def _client_kwargs(self) -> dict[str, Any]:
217
216
  timeout = self.timeout if self.timeout is not None else float(os.environ.get("OPENAI_TIMEOUT", "30.0"))
@@ -226,16 +225,10 @@ class OpenAIChatGenerator:
226
225
  "max_retries": max_retries,
227
226
  }
228
227
 
229
- def _warm_up_tools(self) -> None:
230
- if not self._tools_warmed_up:
231
- warm_up_tools(self.tools)
232
- self._tools_warmed_up = True
233
-
234
228
  def warm_up(self) -> None:
235
229
  """
236
- Warm up the tools and initialize the synchronous OpenAI client.
230
+ Initialize the synchronous OpenAI client.
237
231
  """
238
- self._warm_up_tools()
239
232
  if self.client is None:
240
233
  # openai>=3 annotates http_client as httpx2, but legacy httpx clients are supported at runtime.
241
234
  # https://github.com/openai/openai-python/blob/main/httpx2.md
@@ -247,9 +240,8 @@ class OpenAIChatGenerator:
247
240
 
248
241
  async def warm_up_async(self) -> None: # noqa: RUF029
249
242
  """
250
- Warm up the tools and initialize the asynchronous OpenAI client on the serving event loop.
243
+ Initialize the asynchronous OpenAI client on the serving event loop.
251
244
  """
252
- self._warm_up_tools()
253
245
  if self.async_client is None:
254
246
  # openai>=3 annotates http_client as httpx2, but legacy httpx clients are supported at runtime.
255
247
  # https://github.com/openai/openai-python/blob/main/httpx2.md
@@ -668,7 +660,7 @@ def _convert_chat_completion_to_chat_message(
668
660
  for openai_tc in openai_tool_calls:
669
661
  arguments_str = openai_tc.function.arguments
670
662
  try:
671
- arguments = json.loads(arguments_str)
663
+ arguments = _parse_openai_tool_call_arguments(arguments_str)
672
664
  tool_calls.append(ToolCall(id=openai_tc.id, tool_name=openai_tc.function.name, arguments=arguments))
673
665
  except json.JSONDecodeError:
674
666
  logger.warning(
@@ -29,6 +29,7 @@ from haystack.dataclasses import (
29
29
  ToolCallDelta,
30
30
  select_streaming_callback,
31
31
  )
32
+ from haystack.dataclasses.chat_message import _parse_openai_tool_call_arguments
32
33
  from haystack.dataclasses.streaming_chunk import FinishReason, _invoke_streaming_callback
33
34
  from haystack.tools import (
34
35
  ToolsType,
@@ -36,7 +37,6 @@ from haystack.tools import (
36
37
  deserialize_tools_or_toolset_inplace,
37
38
  flatten_tools_or_toolsets,
38
39
  serialize_tools_or_toolset,
39
- warm_up_tools,
40
40
  )
41
41
  from haystack.utils import Secret, deserialize_callable, serialize_callable
42
42
  from haystack.utils.http_client import init_http_client
@@ -69,7 +69,7 @@ class OpenAIResponsesChatGenerator:
69
69
  """
70
70
  Completes chats using OpenAI's Responses API.
71
71
 
72
- It works with the gpt-4 and o-series models and supports streaming responses
72
+ It works with OpenAI's GPT and o-series models and supports streaming responses
73
73
  from OpenAI API. It uses [ChatMessage](https://docs.haystack.deepset.ai/docs/chatmessage)
74
74
  format in input and output.
75
75
 
@@ -231,7 +231,6 @@ class OpenAIResponsesChatGenerator:
231
231
 
232
232
  self.client: OpenAI | None = None
233
233
  self.async_client: AsyncOpenAI | None = None
234
- self._tools_warmed_up = False
235
234
 
236
235
  def _client_kwargs(self) -> dict[str, Any]:
237
236
  timeout = self.timeout if self.timeout is not None else float(os.environ.get("OPENAI_TIMEOUT", "30.0"))
@@ -247,20 +246,10 @@ class OpenAIResponsesChatGenerator:
247
246
  "max_retries": max_retries,
248
247
  }
249
248
 
250
- def _warm_up_tools(self) -> None:
251
- if not self._tools_warmed_up:
252
- is_openai_tool = isinstance(self.tools, list) and bool(self.tools) and isinstance(self.tools[0], dict)
253
- # We only warm up Haystack tools, not OpenAI/MCP tools
254
- # The type ignore is needed because mypy cannot infer the type correctly
255
- if not is_openai_tool:
256
- warm_up_tools(self.tools) # type: ignore[arg-type]
257
- self._tools_warmed_up = True
258
-
259
249
  def warm_up(self) -> None:
260
250
  """
261
- Warm up the tools and initialize the synchronous OpenAI client.
251
+ Initialize the synchronous OpenAI client.
262
252
  """
263
- self._warm_up_tools()
264
253
  if self.client is None:
265
254
  # openai>=3 annotates http_client as httpx2, but legacy httpx clients are supported at runtime.
266
255
  # https://github.com/openai/openai-python/blob/main/httpx2.md
@@ -272,9 +261,8 @@ class OpenAIResponsesChatGenerator:
272
261
 
273
262
  async def warm_up_async(self) -> None: # noqa: RUF029
274
263
  """
275
- Warm up the tools and initialize the asynchronous OpenAI client on the serving event loop.
264
+ Initialize the asynchronous OpenAI client on the serving event loop.
276
265
  """
277
- self._warm_up_tools()
278
266
  if self.async_client is None:
279
267
  # openai>=3 annotates http_client as httpx2, but legacy httpx clients are supported at runtime.
280
268
  # https://github.com/openai/openai-python/blob/main/httpx2.md
@@ -692,7 +680,7 @@ def _convert_response_to_chat_message(responses: Response | ParsedResponse) -> C
692
680
 
693
681
  elif output.type == "function_call":
694
682
  try:
695
- arguments = json.loads(output.arguments)
683
+ arguments = _parse_openai_tool_call_arguments(output.arguments)
696
684
  tool_calls.append(
697
685
  ToolCall(
698
686
  id=output.id, tool_name=output.name, arguments=arguments, extra={"call_id": output.call_id}
@@ -59,7 +59,7 @@ class AnswerJoiner:
59
59
 
60
60
  from haystack.core.pipeline import Pipeline
61
61
 
62
- from haystack.components.generators.chat import OpenAIChatGenerator
62
+ from haystack.components.generators.chat import OpenAIResponsesChatGenerator
63
63
  from haystack.dataclasses import ChatMessage
64
64
 
65
65
 
@@ -68,8 +68,8 @@ class AnswerJoiner:
68
68
  ChatMessage.from_user(query)]
69
69
 
70
70
  pipe = Pipeline()
71
- pipe.add_component("llm_1", OpenAIChatGenerator())
72
- pipe.add_component("llm_2", OpenAIChatGenerator())
71
+ pipe.add_component("llm_1", OpenAIResponsesChatGenerator())
72
+ pipe.add_component("llm_2", OpenAIResponsesChatGenerator())
73
73
  pipe.add_component("aba", AnswerBuilder())
74
74
  pipe.add_component("abb", AnswerBuilder())
75
75
  pipe.add_component("joiner", AnswerJoiner())
@@ -33,7 +33,7 @@ class BranchJoiner:
33
33
  import json
34
34
 
35
35
  from haystack import Pipeline
36
- from haystack.components.generators.chat import OpenAIChatGenerator
36
+ from haystack.components.generators.chat import OpenAIResponsesChatGenerator
37
37
  from haystack.components.joiners import BranchJoiner
38
38
  from haystack.components.validators import JsonSchemaValidator
39
39
  from haystack.dataclasses import ChatMessage
@@ -54,7 +54,7 @@ class BranchJoiner:
54
54
 
55
55
  # Add components to the pipeline
56
56
  pipe.add_component("joiner", BranchJoiner(list[ChatMessage]))
57
- pipe.add_component("generator", OpenAIChatGenerator(model="gpt-4.1-mini"))
57
+ pipe.add_component("generator", OpenAIResponsesChatGenerator(model="gpt-5.6-luna"))
58
58
  pipe.add_component("validator", JsonSchemaValidator(json_schema=person_schema))
59
59
 
60
60
  # And connect them
@@ -64,7 +64,7 @@ class BranchJoiner:
64
64
 
65
65
  result = pipe.run(
66
66
  data={
67
- "generator": {"generation_kwargs": {"response_format": {"type": "json_object"}}},
67
+ "generator": {"generation_kwargs": {"text": {"format": {"type": "json_object"}}}},
68
68
  "joiner": {"value": [ChatMessage.from_user("Create json from Peter Parker")]}}
69
69
  )
70
70
 
@@ -80,9 +80,9 @@ class BranchJoiner:
80
80
  connected components and also the type of data that `BranchJoiner` will send through its output.
81
81
 
82
82
  In the code example, `BranchJoiner` receives a looped back `list[ChatMessage]` from the `JsonSchemaValidator` and
83
- sends it down to the `OpenAIChatGenerator` for re-generation. We can have multiple loopback connections in the
84
- pipeline. In this instance, the downstream component is only one (the `OpenAIChatGenerator`), but the pipeline could
85
- have more than one downstream component.
83
+ sends it down to the `OpenAIResponsesChatGenerator` for re-generation. We can have multiple loopback connections in
84
+ the pipeline. In this instance, the downstream component is only one (the `OpenAIResponsesChatGenerator`), but the
85
+ pipeline could have more than one downstream component.
86
86
  """
87
87
 
88
88
  def __init__(self, type_: type) -> None:
@@ -21,7 +21,7 @@ class ListJoiner:
21
21
  Usage example:
22
22
  ```python
23
23
  from haystack.components.builders import ChatPromptBuilder
24
- from haystack.components.generators.chat import OpenAIChatGenerator
24
+ from haystack.components.generators.chat import OpenAIResponsesChatGenerator
25
25
  from haystack.dataclasses import ChatMessage
26
26
  from haystack import Pipeline
27
27
  from haystack.components.joiners import ListJoiner
@@ -39,8 +39,8 @@ class ListJoiner:
39
39
 
40
40
  prompt_builder = ChatPromptBuilder(template=user_message)
41
41
  feedback_prompt_builder = ChatPromptBuilder(template=feedback_message)
42
- llm = OpenAIChatGenerator()
43
- feedback_llm = OpenAIChatGenerator()
42
+ llm = OpenAIResponsesChatGenerator()
43
+ feedback_llm = OpenAIResponsesChatGenerator()
44
44
 
45
45
  pipe = Pipeline()
46
46
  pipe.add_component("prompt_builder", prompt_builder)
@@ -19,9 +19,6 @@ class StringJoiner:
19
19
  from haystack.components.builders import PromptBuilder
20
20
  from haystack.core.pipeline import Pipeline
21
21
 
22
- from haystack.components.generators.chat import OpenAIChatGenerator
23
- from haystack.dataclasses import ChatMessage
24
-
25
22
  string_1 = "What's Natural Language Processing?"
26
23
  string_2 = "What is life?"
27
24