Go to file
Lucio Lelii e8ea94cd2c Let an LLM node hand different things to different places
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>
2026-09-24 17:15:43 +02:00
.mvn/wrapper upgrade to springboot 4 2026-05-05 19:22:53 +02:00
src Let an LLM node hand different things to different places 2026-09-24 17:15:43 +02:00
.gitattributes first commit 2025-03-27 11:38:06 +01:00
.gitignore Remove the internal host and the working notes from the published source 2026-09-21 14:22:05 +02:00
CITATION.cff Point the project at its home on the ISTI Gitea 2026-09-21 14:48:54 +02:00
Dockerfile Harden Maven downloads in Docker build 2026-09-10 11:34:39 +02:00
LICENSE Release under the AGPL with an attribution term 2026-09-16 12:10:26 +02:00
LICENSE-ADDENDUM Point the project at its home on the ISTI Gitea 2026-09-21 14:48:54 +02:00
NOTICE Point the project at its home on the ISTI Gitea 2026-09-21 14:48:54 +02:00
README.md Point the project at its home on the ISTI Gitea 2026-09-21 14:48:54 +02:00
mvnw first commit 2025-03-27 11:38:06 +01:00
mvnw.cmd first commit 2025-03-27 11:38:06 +01:00
ollama-preloaded-docker image for test with ollama added 2025-09-29 17:00:57 +02:00
pom.xml Point the project at its home on the ISTI Gitea 2026-09-21 14:48:54 +02:00
run_service.sh Replace Flyway schema setup with JPA mappings 2026-09-09 12:20:36 +02:00

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.