Hayhooks

Implementa y sirve pipelines de Haystack como APIs REST, herramientas MCP y backends de finalización de chat compatibles con OpenAI.

Documentación

Hayhooks

Hayhooks facilita el despliegue y la exposición de Pipelines y Agentes de Haystack.

Con Hayhooks, puedes:

  • 📦 Desplegar tus pipelines y agentes de Haystack como APIs REST con máxima flexibilidad y código mínimo.
  • 🛠️ Exponer tus pipelines y agentes de Haystack a través del protocolo MCP, haciéndolos disponibles como herramientas en entornos de desarrollo de IA como Cursor o Claude Desktop. Internamente, Hayhooks funciona como un Servidor MCP, exponiendo cada pipeline y agente como una Herramienta MCP.
  • 🤝 Exponer tus pipelines y agentes de Haystack a través del protocolo A2A (pip install "hayhooks[a2a]"), para que otros agentes puedan descubrirlos mediante tarjetas de agente generadas automáticamente y delegarles tareas a través de hayhooks a2a run.
  • 💬 Integrar tus pipelines y agentes de Haystack con Open WebUI como backends de finalización de chat compatibles con OpenAI, con soporte de streaming.
  • 🖥️ Incrustar una interfaz de chat de Chainlit directamente en Hayhooks con pip install "hayhooks[chainlit]" y hayhooks run --with-chainlit: frontend sin configuración con streaming, selección de pipelines y widgets de UI personalizados.
  • 🕹️ Controlar los endpoints de la API principal de Hayhooks mediante chat: desplegar, retirar, listar o ejecutar pipelines y agentes de Haystack chateando con Claude Desktop, Cursor o cualquier otro cliente MCP.
  • 📈 Trazar las acciones del ciclo de vida de Hayhooks con OpenTelemetry (pip install "hayhooks[tracing]") para visibilidad de despliegue/ejecución/retirada en REST y MCP, con una interfaz de /dashboard a través de hayhooks run --with-tracing-dashboard (respaldada por un buffer local de trazas en vivo).

PyPI - Version PyPI - Python Version Docker image release Tests

Documentación

📚 Para guías detalladas, ejemplos y referencia de API, consulta nuestra documentación completa.

Inicio Rápido

1. Instalar Hayhooks

# Install Hayhooks
pip install hayhooks

2. Iniciar Hayhooks

hayhooks run

3. Crear un agente simple

Crea un envoltorio de agente mínimo con soporte de chat en streaming y una API HTTP POST simple:

from typing import AsyncGenerator
from haystack.components.agents import Agent
from haystack.dataclasses import ChatMessage
from haystack.tools import Tool
from haystack.components.generators.chat import OpenAIChatGenerator
from hayhooks import BasePipelineWrapper, async_streaming_generator


# Define a Haystack Tool that provides weather information for a given location.
def weather_function(location):
    return f"The weather in {location} is sunny."

weather_tool = Tool(
    name="weather_tool",
    description="Provides weather information for a given location.",
    parameters={
        "type": "object",
        "properties": {"location": {"type": "string"}},
        "required": ["location"],
    },
    function=weather_function,
)

class PipelineWrapper(BasePipelineWrapper):
    def setup(self) -> None:
        self.agent = Agent(
            chat_generator=OpenAIChatGenerator(model="gpt-4o-mini"),
            system_prompt="You're a helpful agent",
            tools=[weather_tool],
        )

    # This will create a POST /my_agent/run endpoint
    # `question` will be the input argument and will be auto-validated by a Pydantic model
    async def run_api_async(self, question: str) -> str:
        result = await self.agent.run_async(messages=[ChatMessage.from_user(question)])
        return result["last_message"].text

    # This will create an OpenAI-compatible /chat/completions endpoint
    async def run_chat_completion_async(
        self, model: str, messages: list[dict], body: dict
    ) -> AsyncGenerator[str, None]:
        chat_messages = [
            ChatMessage.from_openai_dict_format(message) for message in messages
        ]

        return async_streaming_generator(
            pipeline=self.agent,
            pipeline_run_args={
                "messages": chat_messages,
            },
        )

Guárdalo como my_agent_dir/pipeline_wrapper.py.

4. Desplegarlo

hayhooks pipeline deploy-files -n my_agent ./my_agent_dir

5. Ejecutarlo

Llama a la API HTTP POST (/my_agent/run):

curl -X POST http://localhost:1416/my_agent/run \
  -H 'Content-Type: application/json' \
  -d '{"question": "What can you do?"}'

Llama a la API de finalización de chat compatible con OpenAI (streaming habilitado):

curl -X POST http://localhost:1416/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "my_agent",
    "messages": [{"role": "user", "content": "What can you do?"}]
  }'

¡O chatea con él en la UI de Chainlit integrada (hayhooks run --with-chainlit) o intégralo con Open WebUI!

Características Clave

🚀 Despliegue Fácil

  • Despliega pipelines y agentes de Haystack como APIs REST con configuración mínima
  • Soporte para despliegue de pipelines basado en YAML y en envoltorios
  • Generación automática de endpoints compatibles con OpenAI

🌐 Múltiples Opciones de Integración

  • Protocolo MCP: Expón pipelines como herramientas MCP para usar en entornos de desarrollo de IA
  • Protocolo A2A: Expón pipelines como agentes A2A que otros agentes pueden descubrir y delegar tareas
  • UI de Chainlit: Frontend de chat integrado con streaming, selección de pipelines y widgets de UI personalizados
  • Integración con Open WebUI: Usa Hayhooks como backend para Open WebUI con soporte de streaming
  • Compatibilidad con OpenAI: Integración perfecta con herramientas y frameworks compatibles con OpenAI

🔧 Amigable para Desarrolladores

  • CLI para gestión sencilla de pipelines
  • Opciones de configuración flexibles
  • Soporte integral de registro y depuración
  • Hooks de trazado listos para OpenTelemetry basados en las APIs de trazado de Haystack
  • Soporte de rutas y middleware personalizados

📁 Soporte de Carga de Archivos

  • Soporte integrado para manejar cargas de archivos en pipelines
  • Perfecto para sistemas RAG y procesamiento de documentos

Próximos Pasos

Comunidad y Soporte

Hayhooks es mantenido activamente por el equipo de deepset.