Skip to content

Releases: webdevtodayjason/story-lantern

story-lantern 0.1.4

Choose a tag to compare

@webdevtodayjason webdevtodayjason released this 24 Sep 17:35

Story Lantern 0.1.4

require_device() gains one more step when TIINY_KEY, the farm file, and
everything else come up empty: asks for the box's password and calls the
device's own account API to get a working key directly, no TiinyOS desktop
app needed. Only runs at a terminal.

Shaped to fit this app's own design: nothing is persisted to disk here on
purpose, so the discovered key sets the environment variable for that run
only, the same way TIINY_KEY already works, rather than writing a new
config file.

v0.1.3

Choose a tag to compare

@webdevtodayjason webdevtodayjason released this 17 Sep 06:23

Story Lantern 0.1.3

Problem. The lantern was hard wired to tell every story with deepreinforce-ai/Ornith-1.0-35B. The farm listing only asks for a chat model, so a Tiiny holding Qwen3-8B or Qwen3.8-27B instead got 404 "Ornith-1.0-35B" is not loaded on the first planning call, and the lamp turned that into "Goodnight" and went back to the prompt with no story. Two people hit it on 2026-09-16; reproduced on Jason's unit in five seconds.

Fix. The storyteller is chosen once per story from what the Tiiny is actually holding: Ornith when it is there, then Qwen3.8, Qwen3.6, Qwen3-30B, Qwen3.5, gpt-oss, GLM, then any other chat model; coder, embedding, reranker, OCR, ASR, TTS, image and music models are never chosen. Ornith is started only when it is installed and fits the free NPU units, because the device rolls a load back silently when it does not. When no storyteller can be had, the lamp shows a calm card ("The lantern needs a storyteller. Ask a grown-up to check the Tiiny.") instead of a goodnight, and the parent view says exactly what is missing and what the device is holding. A story that fails after a page has been read still ends with the goodnight, on purpose. The parent view now shows who told each story.

Tests. tests/fake_device_test.py 60 to 71 checks; new tests/storyteller_test.py, 16 tests, against a fake device that answers the four model routes and rolls an oversized load back the way the real one does. Real run on a Tiiny holding Qwen3-8B and Qwen3.8-27B with no Ornith: a three page story told by Qwen3.8-27B, audio on every page, plates skipped because Z-Image did not fit. Adversarially verified in two rounds; the parent view and the unreachable-device reason were fixed in the second.

Also in this release: the repo's version string is bumped to 0.1.3 (it had stayed at 0.1.0 through two farm releases), and the README no longer names Ornith as required.

Story Lantern 0.1.2

Choose a tag to compare

@webdevtodayjason webdevtodayjason released this 14 Sep 01:16

Installable from tiinyapp.farm.

The farm scans an archive before it will list it, and it refuses subprocess outright. 0.1.1 used subprocess to read ip or ifconfig when working out which addresses this machine holds, so the catalog could not move off 0.1.0, which is the version that does not work on Tiiny 1.0 at all.

It finds the same box with sockets instead. A UDP connect that sends no packet gives this machine its own address on the route, and bind() finds the attached USB /30s, which is the recipe the farm already ships in titanium-tiiny-bot. Measured against a real box on firmware 1.0: same USB peer, same 253 LAN candidates, same serial, about a third of a second slower on a cold scan.

Python standard library only. Nothing leaves your network.

Story Lantern 0.1.1

Choose a tag to compare

@webdevtodayjason webdevtodayjason released this 13 Sep 19:15
ea1ad47

Works on Tiiny 1.0.

It finds the box instead of demanding its address, and asks which port serves the AI gateway rather than assuming 8800, which moved in 1.0.0. It no longer probes the device when the module is imported, so importing it in a test or another app costs nothing.

Python standard library only. Nothing leaves your network.