Skip to main content

Install

pip install synap-haystack

What’s included

ClassPurpose
SynapRetrieverPipeline component that fetches Synap memories as Document objects
SynapMemoryWriterPipeline component that writes conversation turns back to Synap

SynapRetriever

Retrieves memories as Haystack Document objects for use in RAG pipelines.
from haystack import Pipeline
from haystack.components.builders import PromptBuilder
from synap_haystack import SynapRetriever

retriever = SynapRetriever(
    sdk=sdk,
    user_id="alice",
    customer_id="acme",   # optional
    max_results=6,
    mode="fast",          # "fast" or "accurate"
)

pipeline = Pipeline()
pipeline.add_component("retriever", retriever)
pipeline.add_component("prompt_builder", PromptBuilder(template=your_template))
pipeline.connect("retriever.documents", "prompt_builder.documents")

result = pipeline.run({"retriever": {"query": "project deadlines"}})
Each returned Document has:
  • content — the memory text
  • meta["type"] — memory type (e.g. "fact", "preference")
  • meta["confidence"] — relevance score

SynapMemoryWriter

Records conversation turns back into Synap. Place it at the end of your pipeline after the LLM response.
from synap_haystack import SynapRetriever, SynapMemoryWriter

writer = SynapMemoryWriter(
    sdk=sdk,
    conversation_id="conv-001",
    user_id="alice",
    customer_id="acme",
)

pipeline = Pipeline()
pipeline.add_component("retriever", retriever)
pipeline.add_component("llm", your_llm)
pipeline.add_component("writer", writer)

pipeline.connect("retriever.documents", "llm.documents")
pipeline.connect("llm.replies", "writer.replies")
SynapMemoryWriter surfaces write failures explicitly (raises SynapIntegrationError) so your pipeline knows if memory persistence failed.

Full pipeline example

from haystack import Pipeline
from haystack.components.builders import PromptBuilder
from haystack.components.generators import OpenAIGenerator
from synap_haystack import SynapRetriever, SynapMemoryWriter

retriever = SynapRetriever(sdk=sdk, user_id="alice")
writer = SynapMemoryWriter(sdk=sdk, conversation_id="conv-001", user_id="alice")

template = """
Given this context about the user:
{% for doc in documents %}
- {{ doc.content }}
{% endfor %}
Answer: {{ query }}
"""

pipeline = Pipeline()
pipeline.add_component("retriever", retriever)
pipeline.add_component("prompt", PromptBuilder(template=template))
pipeline.add_component("llm", OpenAIGenerator(model="gpt-4o"))
pipeline.add_component("writer", writer)

pipeline.connect("retriever.documents", "prompt.documents")
pipeline.connect("prompt.prompt", "llm.prompt")
pipeline.connect("llm.replies", "writer.replies")

result = pipeline.run({
    "retriever": {"query": "What are my priorities?"},
    "prompt": {"query": "What are my priorities?"},
})

Next steps

LangChain

Memory and retriever for LangChain.

LlamaIndex

BaseMemory and retriever for LlamaIndex.