⭐ Highlights
🗣️ Introducing ConversationalAgent
Great news! We’re introducing the ConversationalAgent
– a type of Agent specifically implemented to create chat applications! With its memory integration, the new ConversationalAgent
enables human-like conversation with large language models (LLMs). If you’re worried about the token limit of your model, there is an option to condense the chat history with ConversationSummaryMemory
before injecting the history into the prompt.
To get started, just initialize ConversationalAgent
with a PromptNode
and start chatting.
summary_memory = ConversationalSummaryMemory(prompt_node=prompt_node)
conversational_agent = ConversationalAgent(
prompt_node=prompt_node,
memory=summary_memory
)
conversational_agent.run(user_input)
To try it out, check out the new ConversationalAgent Tutorial, see the full example, or visit our documentation!
🎉 Now using transformers 4.29.1
With this release, Haystack depends on the latest version of the transformers
library.
🧠 More LLMs
Haystack now supports command
from Cohere and claude
from Anthropic!
🤖 New error reporting strategy around 3rd-party dependencies
One of the challenges with a multi-purpose NLP framework like Haystack is to find the sweet spot of a turn-key solution implementing multiple NLP use cases without getting into dependency hell. With the new features around generative AI recently shipped, we got several requests about avoiding pulling in too many unrelated dependencies when, say, one just needs a PromptNode
.
We heard your feedback and lowered the number of packages a simple pip install farm-haystack
pulls in (and we'll keep doing it)! To keep the user experience as smooth as possible, by using the generalimports
library, we defer dependency errors from "import time" down to "actual usage time" – so that you don't have to ask yourself "Why do I need this database client to run PromptNode?" anymore.
⚠️ MilvusDocumentStore Deprecated in Haystack
With Haystack 1.17, we have moved the MilvusDocumentStore out of the core haystack project, and we will maintain it in the haystack-extras repo. To continue using Milvus, check out the instructions on how to install the package separately in its readme.
What's Changed
⚠️ Breaking Changes
- refactor: Update schema objects to handle Dataframes in to_{dict,json} and from_{dict,json} by @sjrl in #4747
- chore: remove deprecated MilvusDocumentStore by @masci in #4951
- chore: remove BaseKnowledgeGraph by @masci in #4953
- chore: remove deprecated node PDFToTextOCRConverter by @masci in #4982
Pipeline
- chore: upgrade transformers to 4.28.1 by @vblagoje in #4665
- chore: fixed reader loading test for hf-hub starting 0.14.0 by @mayankjobanputra in #4607
- bug: (rest_api) remove full logging of overwritten env variables by @duffn in #4791
- fix: preserve
root_node
inJoinNode
's output by @ZanSara in #4820 - feat: Send pipeline config hash every 100 runs by @bogdankostic in #4884
- feat: add BLIP support in
TransformersImageToText
by @anakin87 in #4912 - fix:
EvaluationResult
serialization changes dataframes by @tstadel in #4906 - fix: shaper exception when retriever return 0 docs. by @yuanwu2017 in #4929
- fix: Use
AutoTokenizer
instead of DPR specific tokenizer by @bogdankostic in #4898 - fix: Fix necessary extra for MarkdownConverter by @bogdankostic in #4947
DocumentStores
- fix: Add support for
_split_overlap
meta to Pinecone anddict
metadata in general to Weaviate by @bogdankostic in #4805 - fix: str issues in
squad_to_dpr
by @PhilipMay in #4826 - feat: introduce
generalimport
by @ZanSara in #4662 - feat: Support authentication using AuthBearerToken and AuthClientCredentials in Weaviate by @hsm207 in #4028
Documentation
- fix: loads local HF Models in PromptNode pipeline by @saitejamalyala in #4670
- fix: README latest and main installation by @dfokina in #4741
- fix: SentenceTransformersRanker's predict_batch returns wrong number of documents by @vblagoje in #4756
- feat: add Google API to search engine providers by @Pouyanpi in #4722
- bug: fix filtering in
MemoryDocumentStore
(v2) by @ZanSara in #4768 - refactor: Extract ToolsManager, add it to Agent by composition by @vblagoje in #4794
- chore: move custom linter to a separate package by @masci in #4790
- refactor!: Deprecate
name
param inPromptTemplate
and introducetemplate_name
instead by @bogdankostic in #4810 - chore: revert Deprecate
name
param inPromptTemplate
and introduceprompt_name
instead by @bogdankostic in #4834 - chore: remove optional imports in v2 by @ZanSara in #4855
- test: Update unit tests for schema by @sjrl in #4835
- feat: allow filtering documents on all fields (v2) by @ZanSara in #4773
- feat: Add Anthropic invocation layer by @silvanocerza in #4818
- fix: improve
Document
comparison (v2) by @ZanSara in #4860 - feat: Add Cohere PromptNode invocation layer by @vblagoje in #4827
- fix: Support for gpt-4-32k by @dnetguru in #4825
- fix:
Document
v2 JSON serialization by @ZanSara in #4863 - fix: Dynamic
max_answers
for SquadProcessor (fixes IndexError when max_answers is less than the number of answers in the dataset) by @benheckmann in #4817 - feat: Add agent memory by @vblagoje in #4829
- fix: Make sure summary memory is cumulative by @vblagoje in #4932
- feat: Add conversational agent by @vblagoje in #4931
- docs: Small fix to PromptTemplate API docs by @sjrl in #4870
- build: Remove mmh3 dependency by @julian-risch in #4896
- docstrings update in web.py by @dfokina in #4921
- feat: Add max_tokens to BaseGenerator params by @vblagoje in #4168
- fix: change parameter name to
request_with_retry
by @ZanSara in #4950 - fix: Adjust tool pattern to support multi-line inputs by @vblagoje in #4801
- feat: enable passing generation_kwargs to the PromptNode in pipeline.run() by @faaany in #4832
- fix: Remove streaming LLM tracking; they are all streaming now by @vblagoje in #4944
- feat: HFInferenceEndpointInvocationLayer streaming support by @vblagoje in #4819
- fix: Fix request_with_retry kwargs by @silvanocerza in #4980
Other Changes
- fix: Allow to set
num_beams
in HFInvocationLayer by @sywangyi in #4731 - ci: Execute pipelines and utils unit tests in CI by @bogdankostic in #4749
- refactor: Make agent test more robust by @vblagoje in #4767
- ci: Add coverage tracking with Coveralls by @silvanocerza in #4772
- test: move several modeling tests in e2e/ by @ZanSara in #4308
- chore: Added deprecation tests for seq2seq generator and RAG Generator by @mayankjobanputra in #4782
- feat: Add HF local runtime token streaming support by @vblagoje in #4652
- fix: load the local finetuning model from pipeline yaml (#4729) by @yuanwu2017 in #4760
- test: Add others folder to unit test job by @silvanocerza in #4800
- ci: Fix release_docs.py to create docs with correct version by @silvanocerza in #4803
- feat: Update preview Pipelines following Canals changes by @silvanocerza in #4821
- test: Add modeling to unit tests so it we can get coverage for that by @sjrl in #4809
- ci: check that base install succeeds on all platforms by @ZanSara in #4845
- docs: fix Prompt_Node and Pipelines API reference by @dfokina in #4858
- chore: skip flaky test by @ZanSara in #4846
- fix: Fix missing error in openai_request retry strategy by @silvanocerza in #4802
- fix: Hide api classes in prompt_node by @dfokina in #4869
- ci: Add missing unit tests topics to coverage upload step by @silvanocerza in #4873
- chore: pin
canals
by @ZanSara in #4853 - fix: add
unit
markers to several v2 tests by @ZanSara in #4851 - ci: add new license checker by @masci in #4779
- ci: Upload coverage only if all unit tests pass by @silvanocerza in #4874
- build: do not install 'dev' extras with 'all' by @masci in #4888
- ci: add a job to vet license of direct dependencies only by @masci in #4885
- Add base test class for v2 Components by @ZanSara in #4908
- build: Upgrade transformers to 4.29.1 by @julian-risch in #4886
- add test case for #4929 by @masci in #4936
- Pin Weaviate client by @masci in #4952
- fix: Remove instruction following warning by @vblagoje in #4942
- Add retrieval augmentation demo to readme by @tholor in #4938
- ci: Send tests outcomes to Datadog instead of sending message to Slack by @silvanocerza in #4957
- ci: Remove legacy tests by @silvanocerza in #4961
- ci: Standardize workflows file names by @silvanocerza in #4964
- test: Simplify PromptNode generation_kwargs tests by @silvanocerza in #4975
- fix: fitz import switcher by @ZanSara in #5012
- fix: remove old dependency from file-converters.yml by @masci in #4999
- fix: Pin typing_extensions to fix Pydantic issue by @silvanocerza in #4987
New Contributors
- @sywangyi made their first contribution in #4731
- @saitejamalyala made their first contribution in #4670
- @duffn made their first contribution in #4791
- @yuanwu2017 made their first contribution in #4760
- @Pouyanpi made their first contribution in #4722
- @PhilipMay made their first contribution in #4826
- @dnetguru made their first contribution in #4825
- @faaany made their first contribution in #4832
Full Changelog: v1.16.1...v1.17.0-rc1