This PoC demonstrates an agentic orchestration layer that routes between tools (data.gouv.fr search and Qdrant RAG) while keeping a simple Chainlit UI. It mirrors the intent of OpenWebUI native tool mode: the LLM decides when to respond directly or call tools in a loop, with visible tool steps.
The goal is to validate that a lightweight Hayhooks/Chainlit stack can:
- Load a Haystack pipeline with a custom Ollama generator.
- Run an agent loop that selects tools and iterates on results.
- Provide a friendly UI for testing data.gouv.fr dataset discovery.
- Chainlit UI with an agent router and tool traces.
- Hayhooks service loading a generated Haystack pipeline.
- Tooling for data.gouv.fr datasets and Qdrant-backed RAG.
- Docker
- Ollama running locally (default: http://localhost:11434)
- Ollama models:
- LLM: gemma4:e2b
- Embeddings: nomic-embed-text
Copy the example environment file and edit if needed:
cp .env.example .envStart the full stack:
make startOpen:
- Hayhooks: http://localhost:1416
- Chainlit: http://localhost:8000
- Open Chainlit at http://localhost:8000.
- Ask for the dataset:
Donne-moi le jeu de données "Repertoire national des elus" et liste le fichier
pour les conseillers d'arrondissements de Paris, Lyon et Marseille.
You should see tool steps for:
datagouv.search_data_gouv_datasetsdatagouv.list_dataset_files- optionally
datagouv.read_file_content
make startrunspipelines/src/build_agent.pyto generate the YAML pipeline.- The pipeline definition is written to
pipelines/definitions/router_agent.yaml. - Docker Compose starts Hayhooks and Chainlit.
- Chainlit runs an agent loop that calls tools or answers directly.
.env.exampleshows optionalOLLAMA_URLandOLLAMA_MODELvalues.docker-compose.ymlsets defaults for Chainlit and Hayhooks.
- If Chainlit returns a 500, check
docker compose logs --tail=200 hayhooks. - If tools cannot reach Ollama, verify http://localhost:11434 is reachable.
- If Qdrant is not available, the RAG tool will return a connectivity error.