Haystack Integration

Full observability for Haystack pipelines. Capture component runs, retriever and generator calls, and pipeline execution with automatic instrumentation.

Haystack >= 2.0PipelinesRetrieversGenerators

Installation

Terminal
pip install turingpulse_sdk turingpulse_sdk_haystack haystack-ai

Quick Start

1. Initialize & Instrument

setup.py
from turingpulse_sdk import init, TuringPulseConfig
from turingpulse_sdk_haystack import instrument_haystack

# Initialize TuringPulse
init(TuringPulseConfig(
    api_key="sk_live_your_api_key",
    workflow_name="my-project",
))

# Enable auto-instrumentation for Haystack
instrument_haystack()

2. Use Haystack Normally

main.py
from haystack import Pipeline
from haystack.components.generators import OpenAIGenerator
from haystack.components.builders import PromptBuilder

template = """
Answer the following question based on your knowledge.
Question: {{question}}
Answer:
"""

pipe = Pipeline()
pipe.add_component("prompt_builder", PromptBuilder(template=template))
pipe.add_component("llm", OpenAIGenerator(model="gpt-4o"))
pipe.connect("prompt_builder", "llm")

# Run the pipeline - traces are captured automatically
result = pipe.run({"prompt_builder": {"question": "What is quantum computing?"}})
print(result["llm"]["replies"][0])
ℹ️
Zero Code Changes
Once auto-instrumentation is enabled, all Haystack pipeline runs and component executions are automatically traced.

What Gets Captured

Data PointDescriptionExample
Pipeline RunsFull trace for each pipeline executionpipe.run(inputs=...)
Component RunsEach component with inputs, outputs, and timingPromptBuilder: 25ms
Retriever CallsQuery, retrieved documents, and relevance scoresInMemoryBM25Retriever: 5 docs
Generator CallsModel, prompt, completion, and token usageOpenAIGenerator: gpt-4o, 280 tokens
Document ProcessingDocument conversion, splitting, and embeddingDocumentSplitter: 12 chunks
LatencyEnd-to-end and per-component timingtotal: 2800ms, retriever: 150ms
ErrorsExceptions with pipeline and component contextPipelineError: missing input

Advanced Configuration

config.py
from turingpulse_sdk import KPIConfig
from turingpulse_sdk_haystack import instrument_haystack

run = instrument_haystack(
    pipeline,
    name="haystack-service",
    model="gpt-4o",
    provider="openai",
    kpis=[
        KPIConfig(kpi_id="latency_ms", use_duration=True, alert_threshold=10000),
        KPIConfig(kpi_id="tokens", alert_threshold=8000, comparator="gt"),
    ],
)

RAG Pipeline

rag.py
from haystack import Pipeline
from haystack.components.retrievers.in_memory import InMemoryBM25Retriever
from haystack.components.generators import OpenAIGenerator
from haystack.components.builders import PromptBuilder
from haystack.document_stores.in_memory import InMemoryDocumentStore

document_store = InMemoryDocumentStore()

rag_template = """
Given the following documents, answer the question.
Documents:
{% for doc in documents %}
  {{ doc.content }}
{% endfor %}

Question: {{question}}
Answer:
"""

rag_pipe = Pipeline()
rag_pipe.add_component("retriever", InMemoryBM25Retriever(document_store=document_store))
rag_pipe.add_component("prompt_builder", PromptBuilder(template=rag_template))
rag_pipe.add_component("llm", OpenAIGenerator(model="gpt-4o"))
rag_pipe.connect("retriever", "prompt_builder.documents")
rag_pipe.connect("prompt_builder", "llm")

# Each component in the RAG pipeline is individually traced
result = rag_pipe.run({
    "retriever": {"query": "What are transformers?"},
    "prompt_builder": {"question": "What are transformers?"},
})
💡
Pipeline Visualization
TuringPulse shows a visual trace of your Haystack pipeline, making it easy to identify bottlenecks and debug component failures.

Next Steps