A node could only ever produce one port: its whole answer, as text. That is enough until it has two things to say to two different readers - the address of something it started, and the report about it - at which point whoever is downstream has to pick them apart by guesswork, or a parser block has to be wired in to split on a delimiter the model may or may not honour. Declaring fields turns the answer into ports the editor can wire. The mechanism is only asking: the prompt gains an instruction to close with a JSON object, and that object is read back out of the reply. No provider feature is involved, so it works the same for a single call and for a whole tool loop, on every provider in the catalogue. It refuses rather than guesses. A missing object, or a declared field the model left out, fails and says which - the same choice the loop already makes for a tool call typed as prose. A port that silently arrives empty is worse, because everything downstream reads the emptiness as an answer. The whole reply stays on the response port either way, so a node whose structure disappointed is still readable. The closing object is found by scanning forwards, tracking strings: the last balanced one wins, because an agent that has just written a JSON file tends to quote it before answering. Scanning backwards was the first attempt and cannot be made correct - a quote cannot be told from an escaped one without counting the backslashes before it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .mvn/wrapper | ||
| src | ||
| .gitattributes | ||
| .gitignore | ||
| CITATION.cff | ||
| Dockerfile | ||
| LICENSE | ||
| LICENSE-ADDENDUM | ||
| NOTICE | ||
| README.md | ||
| mvnw | ||
| mvnw.cmd | ||
| ollama-preloaded-docker | ||
| pom.xml | ||
| run_service.sh | ||
README.md
RUN LOCAL SERVICE
./run_service.sh
BUILD DOCKER IMAGE
docker buildx build –platform linux/amd64,linux/arm64 -t luciolelii/humainflow:latest . –push
License
Copyright (C) 2025-2026 Lucio Lelii — ISTI-CNR.
HumAIn Flow is released under the GNU Affero General Public License v3.0 or later (LICENSE), with an additional attribution term under section 7(b) of that license (LICENSE-ADDENDUM).
In practice this means:
you may use, study, modify and redistribute it freely;
if you run a modified version as a network service, you must offer its source to the users of that service;
any work based on it must keep the attribution below, both in the source and where the interface shows its legal notices:
Based on HumAIn Flow, originally developed by Lucio Lelii (ISTI-CNR) — https://gitea-s2i2s.isti.cnr.it/lelii/humainflow-service
If you use HumAIn Flow in academic work, please cite it — see CITATION.cff.