FlowDesk

Chat Model — proof-of-concept

A real, small, character-level chat experiment — a SEPARATE checkpoint from Language Playground (see /language-playground), reusing the same real generative mechanism but trained toward a real chat experience: broader question phrasing and a real chat UI below, still answering real GROUNDED questions about a headline you give it, not open-domain small talk. Fully decoupled from anything else in this app, nothing here ever affects a real trading decision.

Model status

Trained steps
28,740
Train loss
0.223105
real cross-entropy — average -log(probability of the true next character)
Validation loss
1.089466
never trained on — the real generalization check
Checkpoint
Restored from DB
Best validation loss
0.353386 (step 27,759)
Generate below always uses THIS snapshot, never the live training weights above
Training examples
1,500
Validation examples
300
Real headlines available
921
stock_news, last 365 days — no forward-price match required, unlike the sentiment model, so every real headline with text is usable
Learning rate now
0.001482
decays from 0.01 as real training progresses (real inverse-time decay, rate 0.0002) — fixes the real "loss trends down but oscillates more near convergence" behavior of a constant step size
Distinct symbols
55
real distinct tickers in the "what stock symbol" task's own answer space, last 365 days
Avg headlines / symbol
16.8
real diagnostic for the symbol task's own per-task loss: a low number here means real exposure per real ticker is thin, a real data-sparsity limit no amount of model capacity fixes on its own

A real causal-attention DECODER (a position can only see itself and the real past, never the future) trained on real, GROUNDED task triples: d_model=24, heads=4, layers=2, feedforward=96. Every real stock_news headline yields 12-17+ real {context, question, answer} triples (is this a question or a statement, what tense is this, summarize in fewer words, list likely verbs/nouns/adjectives, what stock symbol is this about, what day of the week was this published, what type of sentence is this, what is the structure of this sentence, how many words are in this sentence, is this active or passive voice — all but the heuristic ones and word count (real ground truth) genuinely correct, not a guess — plus sentiment when that column has actually been scored, plus spell a real word from the headline, count its real vowels (a/e/i/o/u), and name its real prefix when it has one from a fixed common list (all real ground truth, the model's current exposure to letter-level/morphological structure) when the headline contains a real word of at least 4 letters, plus a real 2-turn conversation chaining two of the above triples about the SAME real headline so the model also practices attending back across real prior turns). The real "free-form feel" addition over Language Playground: symbol/sentiment/summarize/tense each get 1-2 real hand-written paraphrase questions alongside their canonical one (same real answer, different real wording — see sd_chatmodel_task_question_paraphrases()), plus a small, fixed, honestly-scripted "meta" chitchat set (not grounded in any real headline — see sd_chatmodel_meta_pairs()). Loss computed only over the real answer span (never the given context/question, or the given prior turns). Tokenized either at plain character level or, once a real BPE vocabulary is trained below, real learned subword units — common real words/phrases compress to fewer real tokens, so more real context fits under the same sequence-length ceiling. Each real training step samples a task WEIGHTED by that task's own most recently recorded real loss (see the per-task breakdown below) — a real, evidence-based bias toward practicing whichever tasks are actually struggling, floored so an already-easy task is never starved to zero. Entity grounding is now a real, LEARNED pointer-generator network (See, Liu & Manning 2017), not a fixed heuristic: at every real decoding position the model itself learns where in the real context to attend and how much to trust that copy versus its own vocabulary — trained and generated under the exact same real mechanism, so novel real entities it has never memorized can still be produced correctly by copying them straight out of the given context. A real repetition penalty (1.3) still applies at generation against small-model looping. Trained with real Adam (Kingma & Ba) — per-parameter adaptive moment estimates, not plain SGD like every other model in this app — with a real base learning rate 0.01 and real inverse-time decay rate 0.0002 (see "Learning rate now" above) feeding into it, plus L2 weight decay (0.0001). Adam's own real moment state persists across chunks in the checkpoint (see "adam_state_json"), so it keeps its momentum between real training sessions instead of resetting each time. Output quality at this real scale (a few thousand real headlines at most, 24-dimensional model, no GPU) will be crude — this proves the real mechanism works, not that it writes well yet.

Per-task loss breakdown (latest chunk)

A single blended loss can hide one real task that's genuinely stuck behind others that are actually improving — this is the real loss for each real task type separately, from the most recent training chunk. A task with a small "n" here had few real real-world examples in that chunk, so its own loss number is noisier than the others.

TaskTrain lossTrain nVal lossVal n
Question vs statement01.0894663
Sentence structure (simple/compound/complex/compound-complex)0.22310510

Sign in as an admin to train this model or generate real text.

Training loss curve

trainvalidation
step 28479 — loss 0.53778step 28740 — loss 0.22311