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-aiQuick 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 Point | Description | Example |
|---|---|---|
| Pipeline Runs | Full trace for each pipeline execution | pipe.run(inputs=...) |
| Component Runs | Each component with inputs, outputs, and timing | PromptBuilder: 25ms |
| Retriever Calls | Query, retrieved documents, and relevance scores | InMemoryBM25Retriever: 5 docs |
| Generator Calls | Model, prompt, completion, and token usage | OpenAIGenerator: gpt-4o, 280 tokens |
| Document Processing | Document conversion, splitting, and embedding | DocumentSplitter: 12 chunks |
| Latency | End-to-end and per-component timing | total: 2800ms, retriever: 150ms |
| Errors | Exceptions with pipeline and component context | PipelineError: 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.