feat(ui): okno postepu z logiem podczas pisania horoskopu #19
Reference in New Issue
Block a user
Delete Branch "feat/progress-console"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
Generowanie trwa minutami, a zwykly POST formularza nie dawal zadnego sygnalu —
aplikacja wygladala na zawieszona.
Rozwiazanie
Okno z logiem, zegarem i spinnerem. Log pokazuje rzeczywiste zdarzenia z serwera,
nie udawany pasek postepu — inaczej bylby ozdobnikiem udajacym wiedze, ktorej klient nie ma.
Przyklad z przebiegu na zywo:
Jak to dziala
app/progress.py— strumien NDJSON (a nie SSE, boEventSourceobsluguje tylko GET,a to POST z cialem). Praca leci w watku roboczym, generator odpompowuje kolejke —
dzieki temu zdarzenia docieraja w trakcie pracy, a nie dopiero na koncu. Heartbeat
co 10 s, zeby proxy nie uznalo polaczenia za martwe.
providers.generate(..., on_event)— raportuje kazda ture (start, czas, liczbaznakow, czy urwana). To tura trwa, wiec bez tego log pokazywalby „wysylam do modelu"
i cisze przez minuty — czyli ten sam problem, tylko ladniej.
POST /chart/horoscope/streamw logice + proxy/horoscope/streamw prezentacji.Wynik bez przeladowania: ostatnie zdarzenie niesie gotowy HTML, wyrenderowany z tego
samego szablonu co przeladowanie strony (
_prompt_result.htmlwydzielony z_prompt_block.html).Jedno zrodlo prawdy dla wygladu wyniku — zero duplikacji widoku w JS.
Degradacja: bez strumieniowania w przegladarce formularz idzie klasycznie i wszystko
dziala jak wczesniej, tylko bez okna. Zerwane polaczenie konczy sie komunikatem w logu,
nie cisza. Spinner respektuje
prefers-reduced-motion.Blad znaleziony przy tescie na zywo
Petla kontynuacji odejmowala od budzetu zamowiony limit tury zamiast tokenow
faktycznie wyprodukowanych. Pierwsza tura zjadala caly budzet, wiec urwana odpowiedz
nigdy nie doczekala sie dokonczenia i wracala do uzytkownika jako calosc. Widac to bylo
dopiero na strumieniu — w logu byla jedna tura zakonczona „odpowiedz urwana", po czym koniec.
Naprawione, pokryte testem regresyjnym.
Weryfikacja
z wyprodukowanych tokenow, emisja zdarzen postepu.
okno z 11 liniami logu, kontynuacja po urwaniu, wynik wstawiony bez przeladowania strony.