The observations-only adapter has completed all 10,590 training steps. Two chains are writing development discussions from opposite ends of the same list. The eighteenth forward piece returns 1,512 of 4,595 discussions, adding 73 to the preceding census. A separate tenth-piece census has not returned. The reverse chain separately returned 38 validated discussions at 22:46 UTC on 23 October. These dated returns sum to 1,550; final merged case admission remains pending. Counts follow saved text and facts because scheduler stdout can lose its final lines. The installed scoring package awaits the complete merged set and its original records. Forecast skill and confidence intervals for this completed-training generation remain unmeasured.
A language model that writes and discusses weather and ocean forecasts from the same inputs a forecaster reads, scored against what the weather did. Part of the weather study.
Watcher silent since Oct 24 00:30 UTC. Read again every ten minutes.
| Job | Lane and node | State | When |
|---|---|---|---|
| Forecast job | free background lane, an H100 node | running | ran |
| Forecast job | free back-fill lane, an A100 node | running | ran of 12 h 0 min |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 03:15 UTC (4 d 3 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:23 UTC (3 d 17 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:23 UTC (3 d 17 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:23 UTC (3 d 17 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:23 UTC (3 d 17 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:23 UTC (3 d 17 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:23 UTC (3 d 17 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:23 UTC (3 d 17 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:23 UTC (3 d 17 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:23 UTC (3 d 17 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:23 UTC (3 d 17 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:23 UTC (3 d 17 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:23 UTC (3 d 17 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:23 UTC (3 d 17 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:23 UTC (3 d 17 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:23 UTC (3 d 17 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:57 UTC (3 d 16 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:57 UTC (3 d 16 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:57 UTC (3 d 16 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:57 UTC (3 d 16 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:57 UTC (3 d 16 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:57 UTC (3 d 16 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:57 UTC (3 d 16 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:57 UTC (3 d 16 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:57 UTC (3 d 16 h); waits for the job before it to finish |
| Forecast job | free background lane, an H100 node | waiting | in line since Oct 23 13:57 UTC (3 d 16 h); waits for the job before it to finish |
| Forecast job | free back-fill lane, an A100 node | waiting | in line since Oct 23 19:53 UTC (3 d 10 h); waits for the job before it to finish; 12 h piece |
| Forecast job | free back-fill lane, an A100 node | waiting | in line since Oct 23 19:53 UTC (3 d 10 h); waits for the job before it to finish; 12 h piece |
| Forecast job | free back-fill lane, an A100 node | waiting | in line since Oct 23 19:53 UTC (3 d 10 h); waits for the job before it to finish; 12 h piece |
| Job | Lane and node | State | When |
|---|---|---|---|
| Forecast job | free background lane, an H100 node | finished | ended Oct 23 23:22 UTC after 3 h 30 min |
| Forecast job | free background lane, an H100 node | finished | ended Oct 23 19:52 UTC after 3 h 30 min |
| Forecast job | free background lane, an H100 node | finished | ended Oct 23 14:17 UTC after 3 h 30 min |
| Forecast job | free background lane, an H100 node | finished | ended Oct 23 10:15 UTC after 3 h 30 min |
| Forecast job | free background lane, an H100 node | finished | ended Oct 23 06:45 UTC after 3 h 30 min |
| Forecast job | free background lane, an H100 node | stopped with an error | ended Oct 23 06:09 UTC after 53 min |
| Forecast job | free background lane, an H100 node | stopped with an error | ended Oct 23 04:38 UTC after 3 min |
| Forecast job | free background lane, an H100 node | finished | ended Oct 23 02:24 UTC after 30 min |
Two open models carry the work. Gemma 3 27B is the training line: a LoRA fine-tune that learns to write a full discussion, up to 8,192 tokens, in training run 102. Mistral Small 3.1 24B is the generation line: it writes development forecasts for the scorer to read, so the scoring can be built and checked while the training runs.
Training. Run 102 planned 10,590 optimizer steps and has saved all of them. It runs in pieces, and each piece so far ended on a checkpoint that was reviewed before the next one started. The pieces ran on the free background lane of one GPU cluster until the wait for a slot passed 25 hours. On 20 October the run moved to the uncharged back-fill lane of a second cluster, as three 12-hour pieces. They then sat behind the account's job limit, which another project's shards had filled; early on 21 October that project freed two slots, but the limit never cleared. That evening the three pieces were canceled and the run moved a second time, to a third cluster whose free lane stood idle: the base model, the training image and the reviewed checkpoint were copied to its home disk, a census and a tidy removed a duplicated copy of the base on both machines, and the first of three four-hour pieces started at 20:42 UTC on 21 October, from step 3,498. That piece ran its full 3 h 45, trained 1,096 steps with finite losses, and saved at step 4,594 in eleven seconds. A check that ran after the save compared the new checkpoint with the record of the old one and stopped the piece with an error, so no closing record was written and the two queued pieces were canceled. Early on 22 October the save's four files were hashed on the cluster and reviewed at home, the cause was found in the metadata rather than the weights, and a repaired kit that verifies those hashes on the cluster before it submits queued three more four-hour pieces, the first from step 4,594 with no dependency on the failed job. Its first attempt stopped within minutes: it had validated the save and retired the older one, but read a disk-quota figure that had not yet caught up with that deletion and refused to load the optimizer. A revision that waits for the quota to refresh was rehearsed and queued again before 03:00 UTC, behind another project's work on the same lane. It started at 02:45 UTC, trained from step 4,594 with the optimizer loaded, held finite losses throughout, and saved at step 5,685 in eleven seconds at its budget stop. Its closing record was written cleanly, and the second piece started from that save at 06:33 UTC. That piece reviewed the new save, retired the 4,594 save, waited for the quota figure to catch up before loading the optimizer, trained 1,087 steps and saved at step 6,772 at 10:15 UTC. The third piece started from that save at 10:21 UTC. About 3,800 steps remain, and four more four-hour pieces were queued behind it at 11:10 UTC, each waiting on the one before, which at this pace completes the run. The third piece repeated the pattern and saved at step 7,857 at 14:03 UTC; the first of the queued pieces started from it at 14:09 UTC, with about 2,700 steps left. That piece saved at step 8,942 at 17:51 UTC and the next at step 10,025 at 21:39 UTC, each after retiring the save two back and waiting for the quota figure to refresh, each with finite losses throughout. The piece after them started at 21:41 UTC with 565 steps left, trained them with finite losses, and saved the finished adapter at step 10,590 at 23:45 UTC. The same job then loaded the base model with that adapter and began writing the 4,595 development forecasts, at about one and a half minutes each; it had written seven when a long forecast passed the fifteen minutes its watchdog allows between progress lines, and the job was stopped at 00:18 UTC on 23 October. The last queued piece was dropped with it, as the dependency rule intends. The seven forecasts and the adapter are saved. A one-hour trial of a faster writer that produces several forecasts at once finished early on 23 October: it was faster, but its forecasts diverged from the plain writer's after a handful of tokens, so it was set aside and its twelve forecasts quarantined pending a numerical check. At 03:15 UTC on 23 October the plain writer resumed from the seven saved forecasts, changed only to report progress every minute, as a chain of 36 four-hour pieces, each waiting on the one before. The first piece set the quarantine aside and verified the finished adapter by hash. Its saved census contains 112 discussions: the original seven plus 105 new ones. Its stdout lost the last twelve June discussions, whose saved files passed review. The second piece added 85 by 10:15 UTC, bringing the saved total to 197. The third started at 10:47 UTC on longer forecasts from a second office and returned another successful budget stop with 260 saved discussions, an increase of 63. Its delayed log is truncated at 61 printed completions with no closing result; the accepted count comes from its closing census. At that pace the 36 pieces reach about 3,300 of the 4,595, so a further 15 pieces were queued behind them at 13:30 UTC and ten more at 14:00 UTC, 61 in all as a ceiling; any piece that finds the set complete stops at once, and the last ten count completion against the exact list of 4,595 cases and record every case they write. A one-hour numerical check run alongside found that the plain writer itself, run twice on the same prompt, diverges after a few dozen tokens: greedy decoding on this hardware yields one draw from a narrow distribution rather than a unique text, which is why the forecasts are scored in bulk with confidence intervals.
Writing forecasts. Generation finished on 19 October in round 107: all 4,595 development cases in 19.5 minutes. The six rounds before it crawled because the jobs miscounted their storage; once that was fixed the whole set ran in one sitting.
Scoring. The first scores use rules only (round 111, 20 October, 6.5 minutes on CPUs). For the chance of rain at a point over 24 hours, the written forecasts score a Brier error of 0.1660 on 20,701 matched checks, against 0.1759 for climatology: a skill of 0.0563. 374 forecasts ran into their length limit. Office by office the tables are mixed, and claims worded as hedges often score below climatology. Temperature skill and the consistency count are not measured yet.
Sentence extraction finished at 14:41 UTC on 24 October: all 12,376 protocols for the blind 300-discussion sample. Scoring now includes 2,000 discussion-bootstrap resamples within 24 office-month groups. Numeric point rain-probability skill against matched climatology is 0.0512 (95% interval -0.0277 to 0.1234). Daytime temperature skill is 0.2015 (0.0667 to 0.3042); overnight temperature skill is 0.1489 (-0.0116 to 0.2839). Rain-chance skill is small and its interval includes zero. Daytime temperature error is about a fifth lower than matched climatology, with an interval clear of zero improvement; the overnight comparison is borderline. Per-office results and paired error intervals are available. These provisional results describe the earlier saved generation. The current completed-training generation is still writing its development discussions. Independent claim labels are absent for the generated sample, and previous-issuance, human, field-blind and consistency comparisons remain unmeasured.
Housekeeping. Files on the clusters' work disks that no job reads are being moved to the archive.
As the study last recorded them, Oct 25 21:10 UTC.
Professional forecast discussions, each paired with the model runs the forecaster had in hand, the observations up to that hour, and what happened afterward. The sample is collected at home; the full corpus is built on the clusters.
43,799 forecast discussions; 1,086,793 reports from 48 stations
Turns a discussion into checkable claims (highs, lows, rain chances, winds, seas, hazards) and scores each against the station record. Human discussions go through it first to set the reference.
Sentence extraction is admitted at strict value accuracy 130/162 (80.25%) against 80%. Measured accuracy 129/161 (80.12%) remains context. One service-interrupted temperature sentence was read under a documented amendment after the aggregate recount. A station-code condition outside the decision criterion was removed from the grading wrapper; the accepted NYC metro area representation retains a correct value. The probability follow-up failure remains a service gap. Earlier strict recall was 88.80%, temperature error 2.852 F, and named-place resolution 39.53%. Grouped reading was withdrawn after its timing check. A terse comparison completed 204 of 300 sentence protocols within one hour and remains unadmitted. A future thunderstorm forecast missed by the rules screen led to a lexical expansion. The expanded 500-case screen passed its 74 sampled unflagged checks. A later 300-case recall sample stopped on unresolved sea-breeze timing. Screening was then withdrawn by an explicit decision. Every sentence of the same blind 300-case draw is now selected: 12,376 protocols, with 322 completed protocols reused. Earlier readings outside the draw remain retained and unscored. Twenty home checks pass. Claims without resolved valid time remain unscored with their reason. Sentence extraction finished at 14:41 UTC on October 24: all 12,376 protocols for the same blind 300-discussion draw, with 25,050 saved requests. Scoring and 2,000 discussion-bootstrap resamples are complete. The numeric point rain-probability skill against matched climatology is 0.0512, with a 95% interval from -0.0277 to 0.1234. Daytime temperature skill is 0.2015 [0.0667, 0.3042]; overnight temperature skill is 0.1489 [-0.0116, 0.2839]. These provisional comparisons describe the earlier saved generation. Independent extraction labels for these generated discussions are absent. Previous-issuance, human, field-blind and consistency comparisons remain unmeasured. The current completed-training generation still awaits its complete discussion set. The earlier independent audit remains the admission basis; the new sample supplies forecast-score intervals only.
Every candidate base and two frontier models, with and without tools, on the held-out set. The floor every later result is measured against.
Initial untrained-model comparisons cover 200 held-out-year discussions and 57 Norman cases under each of three inputs. Their observation scores remain provisional: strict sentence recall is 78.8%, below the required 85%. New generation settings passed offline checks; no new forecast scores were produced.
Four ways of showing the model the fields (raw tables, a computed briefing, both, charts) on the same text targets; held-out offices and a held-out year.
The observations-only adapter completes all 10,590 training steps, and its final checkpoint verifies. Two writing chains visit the same selected list from opposite ends. The eighteenth forward piece returns a saved census of 1,512 of 4,595 discussions, adding 73 to the preceding census. A separate tenth-piece census has not returned. The reverse chain separately returned 38 validated discussions at 22:46 UTC on October 23. Their dated component sum is 1,550; final merged case admission remains pending. All 38 returned text/facts pairs pass source, checksum, context-limit and execution-record checks. They match the descending selection. The latest returned piece has scheduler exit 0 and raw exit 3. Its partial compute excerpt contains 40 completed identities; delayed full stdout remains pending. Final text and facts admission remains pending. Current scheduler observations predate this closing record and establish no later state for successors. Counts follow saved discussions because stdout can lose its final lines. The first chain has a ceiling of 61 pieces; the reverse chain retains a rolling limit of four active pieces. Overlaps keep the first accepted text and retain alternates as evidence. Scoring and the final adapter are installed and verified. The completed-discussion transport passes five home checks through the installed reader with its separate adapter. Scoring awaits all 4,595 unique discussions and original completion records in one final tar. Results will include provisional rules-only comparisons with climatology and prior issuance, with paired discussion-bootstrap intervals. Forecast skill remains unmeasured. A tested minute-progress file is reserved for the next verified writing kit; the current installation prints minute progress to stdout.
The model writes several candidates; code scores them against what the weather did and against the input; the weather, never a judge model, decides.
Dialogues where the user asks, asserts and corrects, and is sometimes wrong on purpose; the model is scored on whether it bends.
The same data and scoring at 7, 14, 24 to 27, 70 and 120 billion parameters; the large model's best outputs teach the small one.
Search and rescue drift and survival, radio propagation, thermal contrast, rapid intensification of tropical cyclones, radar signatures, soundings, sea state: each a tool the model calls, with its own test set.
27 tools present; 338 tests passed.
Every job of ours on the clusters, with its state and hardware, is on the training hub's jobs list.
A numerical weather model already holds a forecast: millions of numbers for every place and hour. A human forecaster's value is reading those numbers well, correcting them where the model is known to go wrong, saying it plainly, and applying physics to the question in front of them: will my radio reach that ship, where is the person who fell overboard, will that storm drop large hail. We are training open language models to do that job from the same inputs a forecaster reads (the issued products, the model guidance, the observations), and measuring the result the way forecasters are measured: against what the weather did, next to the human product, climatology and persistence.
Language models write fluent forecasts today, and the published work scores them by how much they resemble a human forecaster's text. Nobody scores them against observations, and nobody tests whether they will say the model run looks wrong. The best expert rating of a model-written severe-weather discussion is about two out of nine. Fluency without skill is the failure we are building against.
The model's job is judgment and words; tools own the numbers. A briefing layer computes what a forecaster would compute from the fields (soundings and their severe-weather parameters, refractivity profiles and ducts, ensemble spread, sea state) and the model reasons over it. For anything numeric it calls a tool: fetching data, parsing a file, drift and survival models, propagation engines, radar classifiers. Pictures reach the model for pattern only, never for reading values. No number appears in an answer that a tool or the input did not produce.
Two models share the work so that neither waits on the other. The training line (Gemma 3 27B) learns the craft; the generation line (Mistral Small 3.1 24B) writes development forecasts now, which lets the scorer be built, audited and corrected before the trained model's own forecasts arrive.
First it imitates professional forecasters: public forecast discussions, each paired with the model runs that forecaster had and nothing later. Then it is tuned on verification: it writes several candidate discussions, code extracts their claims and scores them against the station record, and the better candidates win. Then it practices conversation, including a share of cases where the user is wrong on purpose. The same evaluation runs up a ladder of model sizes, and the large model teaches the small one.
A held-out year and held-out forecast offices. A "wrong day" null: the same training with each text paired with another day's fields; if skill is the same, the model is not reading the fields. A climatology null and a persistence null through the same scorer. A consistency count: every number in the text traced to the input. An admission audit for the claim reader before any score counts. A blind read by forecasters.
Training and generation run as short pieces on the free lanes of GPU clusters at the Navy center, each piece ending on a checkpoint, so a run can move between clusters when one lane's queue grows long. The block above is rebuilt every ten minutes from our job watcher's latest read of the clusters.