Hayhooks

Implante e sirva pipelines Haystack como APIs REST, Ferramentas MCP e backends de conclusão de chat compatíveis com OpenAI.

Documentação

Hayhooks

Hayhooks facilita a implantação e o fornecimento de Haystack Pipelines e Agents.

Com o Hayhooks, você pode:

  • 📦 Implantar seus pipelines e agentes Haystack como APIs REST com máxima flexibilidade e código boilerplate mínimo.
  • 🛠️ Expor seus pipelines e agentes Haystack pelo protocolo MCP, tornando-os disponíveis como ferramentas em ambientes de desenvolvimento de IA como Cursor ou Claude Desktop. Internamente, o Hayhooks roda como um MCP Server, expondo cada pipeline e agente como uma MCP Tool.
  • 🤝 Expor seus pipelines e agentes Haystack pelo protocolo A2A (pip install "hayhooks[a2a]"), para que outros agentes possam descobri-los por meio de cartões de agente gerados automaticamente e delegar tarefas a eles via hayhooks a2a run.
  • 💬 Integrar seus pipelines e agentes Haystack com o Open WebUI como backends de conclusão de chat compatíveis com OpenAI, com suporte a streaming.
  • 🖥️ Embutir uma interface de chat Chainlit diretamente no Hayhooks com pip install "hayhooks[chainlit]" e hayhooks run --with-chainlit -- frontend com zero configuração, streaming, seleção de pipelines e widgets de UI personalizados.
  • 🕹️ Controlar os endpoints da API principal do Hayhooks por chat - implante, remova, liste ou execute pipelines e agentes Haystack conversando com o Claude Desktop, Cursor ou qualquer outro cliente MCP.
  • 📈 Rastrear ações do ciclo de vida do Hayhooks com OpenTelemetry (pip install "hayhooks[tracing]") para visibilidade de deploy/run/undeploy em REST e MCP, com uma UI /dashboard via hayhooks run --with-tracing-dashboard (suportada por um buffer local de rastreamento ao vivo).

PyPI - Version PyPI - Python Version Docker image release Tests

Documentação

📚 Para guias detalhados, exemplos e referência da API, consulte nossa documentação abrangente.

Início Rápido

1. Instale o Hayhooks

# Install Hayhooks
pip install hayhooks

2. Inicie o Hayhooks

hayhooks run

3. Crie um agente simples

Crie um wrapper de agente mínimo com suporte a chat com streaming e uma API HTTP POST simples:

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,
            },
        )

Salve como my_agent_dir/pipeline_wrapper.py.

4. Implante-o

hayhooks pipeline deploy-files -n my_agent ./my_agent_dir

5. Execute-o

Chame a 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?"}'

Chame a API de conclusão de chat compatível com 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?"}]
  }'

Ou converse com ele na UI Chainlit embutida (hayhooks run --with-chainlit) ou integre-o com o Open WebUI!

Principais Recursos

🚀 Implantação Fácil

  • Implante pipelines e agentes Haystack como APIs REST com configuração mínima
  • Suporte para implantação de pipelines baseada em YAML e em wrappers
  • Geração automática de endpoints compatíveis com OpenAI

🌐 Múltiplas Opções de Integração

  • Protocolo MCP: Exponha pipelines como ferramentas MCP para uso em ambientes de desenvolvimento de IA
  • Protocolo A2A: Exponha pipelines como agentes A2A que outros agentes podem descobrir e para os quais podem delegar tarefas
  • UI Chainlit: Frontend de chat embutido com streaming, seleção de pipelines e widgets de UI personalizados
  • Integração com Open WebUI: Use o Hayhooks como backend para o Open WebUI com suporte a streaming
  • Compatibilidade com OpenAI: Integração perfeita com ferramentas e frameworks compatíveis com OpenAI

🔧 Amigável para Desenvolvedores

  • CLI para gerenciamento fácil de pipelines
  • Opções de configuração flexíveis
  • Suporte abrangente a logging e depuração
  • Hooks de rastreamento prontos para OpenTelemetry, construídos sobre as APIs de rastreamento do Haystack
  • Suporte a rotas e middlewares personalizados

📁 Suporte a Upload de Arquivos

  • Suporte integrado para lidar com uploads de arquivos em pipelines
  • Perfeito para sistemas RAG e processamento de documentos

Próximos Passos

Comunidade e Suporte

O Hayhooks é mantido ativamente pela equipe da deepset.