Repository navigation
inferna 0.4.0
Changes since the last Release
Added
-
scripts/rwt.pychecks the images the sd cases write -- exit 0 frominferna.sdonly meant a file was written, so a NaN render (all black) passed. A case now also fails if its PNG is the wrong size or has a per-channel standard deviation below 2. The decoder is stdlib-only because neither the script nor the wheel venv has an image library. -
rwt.py clean --keep-imagesandrun --keep-images-- leavez_turbo_*.pngin the project root so a run's images can be inspected. Each sd case deletes its own image before it runs, so the next run replaces them. -
inferna server --api-key/--api-key-filerequireAuthorization: Bearer <key>on both server types./healthand the static webui files stay public, so the webui can load; it sends the key configured in its settings. The flag names matchllama-server. The embedded server's native bridge now passes request headers to Python; before,handle_http_requestalways received{}.
Changed
-
llama.cpp sync to
b10964(v0.4.1, commitb29c606) -- bumpedLLAMACPP_VERSIONinscripts/manage.py(b10809->b10964). No binding changes were needed. The facade exports the newggml_precvaluesGGML_PREC_UNDEFINED,_BF16,_F16,_Q8and_Q4; upstream deprecatesGGML_PREC_DEFAULTas an alias ofUNDEFINED. -
stable-diffusion.cpp shares llama.cpp's ggml by default --
SD_USE_VENDORED_GGMLnow defaults to off inCMakeLists.txtandmanage.py, matching cyllama. The macOS static wheel had linked SD's vendored ggml, which only the older Metal MSL patch covered. Local--dynamicbuilds that leave the flag unset now build llama.cpp from source, because the prebuilt release usesGGML_MAX_NAME=64.--sd-vendored-ggmlorSD_USE_VENDORED_GGML=1restores the old behaviour. -
whisper.cpp sync to
v1.9.4-- bumpedWHISPERCPP_VERSIONinscripts/manage.py(v1.9.2->v1.9.4). No changes on the wrapped API. Its ggml now takesggml-metal-pin-msl-version-set-lang.patch. -
rwt.pysd cases use Z-Image-Turbo's sampling settings ----steps 8 --cfg-scale 1.0, per upstream stable-diffusion.cppdocs/z_image.md, with a fixed--seed 42. They had run the CLI defaults, 20 steps at cfg 7.0: five times the diffusion passes of 8 steps at cfg 1.0. On an M1 the sd family dropped from 3065 s to 875 s, measured with cyllama's identical copy of the script. The fixed seed makes a backend's images comparable across releases. -
Ruff and mypy target Python 3.12, matching
requires-python. Neither change adds lint findings, becauseUPrules are not selected. Fixed the mypy errors that already failedmake typecheck. TheSDContextParams.backendandparams_backendannotations are for mypy only. -
New
python-lint.ymlPR workflow runsruff check,ruff format --checkandmypyagainst the tool versions inuv.lock, without building the extension. Seven files thatruff formathad not been applied to were reformatted so the check starts green. -
PR CI runs
tests/test_llama_cpp_surface.py. It needs no model and catches drift in the binding facade that the agent layer imports.
Removed
scripts/patches/ggml-metal-pin-msl-version.patchand-perkind.patch-- no default build matches either.-set-langnow covers llama.cpp, whisper.cpp and the shared ggml sd.cpp links. AnSD_USE_VENDORED_GGML=1Metal build ships sd.cpp without the MSL pin.
Security
-
EmbeddedServernow listens on exactly--host. A host of127.0.0.1orlocalhostwas rewritten to0.0.0.0. The embedded server is the default forinferna server, and the servers have no auth, so through 0.3.2 the default command exposed inference to every host that could reach the port. Pass--host 0.0.0.0to expose the server deliberately. -
Both servers log a warning when
--hostis not a loopback address. Without--api-key, a non-loopback bind lets any reachable host run inference. No warning is logged when an API key is set. Warning rather than refusing keeps existing unauthenticated LAN setups working. -
Agent examples in the docs no longer call
evalon tool input. Tool arguments come from the model, so a prompt-injected document could run arbitrary code through a copied example;eval(..., {"__builtins__": {}})does not prevent this. The examples useinferna.agents.tools.calculator, andtests/test_docs_no_eval.pyrejects neweval(calls in Markdown.