The plant in one picture
Electricity in copper. Steam and heat in blue. Fuel dashed. Flue gas and CO2 in grey. The site MV bus is the electrical spine; the steam header is the thermal spine; the amine reboiler sits on the steam header.
How the flows go, in order
- Natural gas from the on-site line goes through the meter and conditioning skid into the combined-cycle gas block. The block puts electricity on the site MV bus.
- HRSG extraction steam from the gas block goes to the steam header. Gas-block exhaust heat drives the absorption chillers in the central thermal plant.
- Off-peak electricity is imported through the utility switchyard onto the bus and into the Rondo heaters. The brick stores it as heat.
- Rondo discharges steam 24×7. Most of it drives the 100 MW steam turbine, which puts electricity on the bus. Turbine extraction steam and the balance of Rondo steam go to the steam header.
- Wood waste from the fuel yard fires the two biomass boilers. Their turbine-generators put electricity on the bus through the §45Y revenue meter.
- Biomass flue gas enters the amine capture unit. The reboiler takes its steam from the steam header. Captured CO2 is compressed, dried, metered, and delivered to sequestration.
- The bus serves the data center. GPU step changes are ridden by the grid-forming BESS. Surplus generation exports through the utility switchyard.
- Data-hall heat goes to the central thermal plant: CDUs, absorption chillers, BTES, dry coolers.
00How to use this document
Section 01 states what is built: the model and the plant, with the plant drawn as one picture. Section 02 is the one rule that governs where the model acts. Sections 03 to 06 are the technical spine: sensors, protocols, data plane, model jobs, API contracts. Section 07 is how the model is trained for the plant. Section 08 is the build, step by step. Section 10 is the learning path, written as a course with labs. Section 11 is the execution phase.
01What is built
The model runs on the SAVRN platform. The plant is the energy island. This section states both.
AThe model
- A proprietary SAVRN model, trained and served by SAVRN on SAVRN hardware. No external model provider is in the path.
- One model path: every SAVRN module reaches the model through the SAVRN AI Gateway. The gateway enforces policy, logs every call, and refuses external providers. Gateway policy is platform policy.
- Tool calling runs through the gateway: the model calls plant tools, and every number it states comes back from a tool result.
- Training program: the model is trained on the plant corpus in rounds, qualified against a golden set of plant tasks before it goes live, and cut over with a manifest and a rollback.
- Separate lanes: production agents and operators use the SAVRN model only. Evaluation against outside models happens in a separate lane that never touches plant tools.
BThe plant
Nine parts. Click any part to open it.
Sitean energy park with its own natural gas line, water rights, interconnect rights, permits, and two existing biomass plants.
an energy park with its own natural gas line, water rights, interconnect rights, permits, and two existing biomass plants.
Data center150 MW IT in three 50 MW liquid-cooled halls.
150 MW IT in three 50 MW liquid-cooled halls. 1,500 VDC collection to 800 VDC rows per the Atom power ICD. 65 MW of the compute load is served under the compute PPA at 92 percent capacity factor.
Combined-cycle gas blockfed from the on-site natural gas line through the meter and conditioning skid.
fed from the on-site natural gas line through the meter and conditioning skid. Gas turbine, HRSG with SCR, steam turbine. HRSG extraction steam is tied into the amine reboiler (the §48 CHP scope: extraction piping, HRSG modifications, reboiler heat exchanger, condensate return). Exhaust heat drives absorption chillers for the data halls.
Rondo heat batteryresistive heaters charge refractory brick on off-peak electricity imported through the utility switchyard.
resistive heaters charge refractory brick on off-peak electricity imported through the utility switchyard. About 4,519 MWh thermal stored, about 188 MW thermal continuous discharge as steam, 24×7. Round-trip efficiency above 97 percent. Charging draw on the order of 170 MW electric in the charging window. With the steam turbine it is the §48E energy storage unit.
Steam turbine island100 MW class condensing turbine with reboiler extraction, about 40 percent efficiency, 250 MW thermal steam demand, fed by Rondo steam.
100 MW class condensing turbine with reboiler extraction, about 40 percent efficiency, 250 MW thermal steam demand, fed by Rondo steam.
Biomass unitstwo existing plants, 18 MW and 21 MW, 39 MW combined, wood-waste boilers and steam turbine-generators, about 85 percent capacity factor, about 226,000 dry tons of fuel per year.
two existing plants, 18 MW and 21 MW, 39 MW combined, wood-waste boilers and steam turbine-generators, about 85 percent capacity factor, about 226,000 dry tons of fuel per year. The §45Y qualified facility.
Amine capture uniton the biomass stack.
on the biomass stack. About 372,500 t/yr of biogenic CO2 at 90 percent capture, reboiler duty about 41 MW thermal at 3.5 GJ/t, steam from the steam header. CO2 is compressed, metered, and delivered to geologic sequestration (Class VI well or contracted offtake). The §45Q source and the removal-attribute source.
Central thermal plantCDUs, heat exchangers, absorption chillers on recovered gas-block heat, closed-loop BTES borehole fields, dry coolers, trim cooling.
CDUs, heat exchangers, absorption chillers on recovered gas-block heat, closed-loop BTES borehole fields, dry coolers, trim cooling. No water mixing with groundwater or geothermal brine.
Electrical13.8 kV site MV bus, protection relays, grid-forming BESS, utility switchyard for import (Rondo charging) and export (surplus generation).
13.8 kV site MV bus, protection relays, grid-forming BESS, utility switchyard for import (Rondo charging) and export (surplus generation). About 172 MW electric continuous on site: 39 biomass + 100 steam turbine + about 16.5 freed gas-block parasitic + about 16.5 recovered biomass parasitic.
02Where the model sits, and where it never sits
One rule governs the whole design. The language model is an advisor and an orchestrator. It is never in a protection path and never in a real-time control loop. Deterministic controllers do control. Relays do protection. The model reads, reasons, drafts, proposes, and explains. When it wants something changed, a human approves a bounded request.
Four rings of authority
The same idea in Purdue levels
Plant people speak Purdue / ISA-95 levels. Use both vocabularies. The model is a Level 3.5 and Level 4 resident. It reaches down only through the DMZ and only to read.
03The plant, subsystem by subsystem
Each block answers the same four questions. What the equipment is. What it measures (the tags). How the data comes out (protocol, source, rate). What the model does with it. Tag names follow the unified namespace site/<area>/<asset>/<measure>.
3.1Natural gas supply
The gas line on the property feeds the combined-cycle gas block through a custody-transfer meter station and a conditioning skid.
| Equipment | Sensors / tags | Protocol · source · rate | Model use |
|---|---|---|---|
| Custody-transfer meter station | Flow (ultrasonic or orifice, AGA 9 / AGA 3), static pressure, temperature, corrected volume, gas chromatograph (HHV, Wobbe index, composition per AGA 8) | Modbus RTU/TCP from the flow computer; pipeline operator SCADA separate; hourly nominations via the utility portal | Fuel cost and heat-rate reconciliation, nomination drafting, variance explanation |
| Fuel gas conditioning skid | Inlet/outlet pressure, filter differential pressure, heater outlet temperature, regulator position, ESD valve open/closed, LEL gas detection, vent status | PLC (Modbus TCP or OPC UA), 1 s | Shift report, anomaly explanation, maintenance trigger |
| Gas service agreement | Firm capacity, delivery pressure, curtailment class, redundancy, nomination rules | Documents, not live data | RAG over the gas service agreement and tariff; nomination drafting |
3.2Generation units
The generators are the combined-cycle gas block (gas turbine plus steam turbine), the 100 MW steam turbine (3.12), and the two biomass turbine-generators (3.10). Each comes with an OEM controller that publishes the tags below.
| Equipment | Sensors / tags | Protocol · source · rate | Model use |
|---|---|---|---|
| Unit controller (OEM) | MW, MVAr, kV, A, Hz, power factor, breaker status, mode (droop / isochronous / grid-following), start count, run hours, trip count, active alarms, fuel flow, heat rate | OEM controller to Modbus TCP / OPC UA / IEC 61850; 1 s electrical, 10 s process | Fleet status, heat-rate drift, start reliability, dispatch commentary |
| Gas turbine health | Compressor discharge pressure and temperature, turbine inlet temperature, exhaust temperature spread, inlet filter differential pressure, inlet air temperature and humidity (chilled inlet), combustor dynamics, fuel valve positions | OEM controller, 1 to 10 s | Anomaly explanation, maintenance planning, summer derate forecast |
| Machinery protection | Vibration (proximity probes, accelerometers per API 670) on turbine and generator bearings and any gearbox, bearing temperatures, speed | Protection monitor (Bently Nevada class) to Modbus / OPC UA; trips hard-wired | Trend narrative only; never in the trip path |
| Generator and step-up transformer | Stator/rotor temps, excitation, transformer winding/oil temp, dissolved gas analysis (DGA), tap position, cooling fans | AVR, transformer monitor (IEC 61850 or Modbus), 10 s to hourly for DGA | Condition reports, DGA interpretation with reference to IEEE C57.104 tables |
3.3Emissions control and monitoring
| Equipment | Sensors / tags | Protocol · source · rate | Model use |
|---|---|---|---|
| SCR (and CO catalyst if fitted) | Catalyst inlet/outlet temperature, differential pressure, ammonia or urea injection rate, dilution air, ammonia slip estimate | SCR PLC, Modbus TCP / OPC UA, 1 to 10 s | Reagent usage reconciliation, catalyst aging narrative |
| CEMS | NOx, CO, O2 (and NH3 if required) at 15 percent O2 dry basis, stack flow if required, calibration status, data availability | DAHS (data acquisition and handling system) export; 1 min averages; 40 CFR 60 App. B / App. F QA | Excess-emission report drafts, deviation narratives, permit-limit watch |
| GHG accounting | Fuel volume × HHV × emission factor; facility-level CO2e | Calculated from 3.1 tags | Annual GHG reporting drafts (state and EPA GHGRP as applicable) |
3.4Heat recovery and absorption cooling
The HRSG on the gas block supplies extraction steam to the steam header and exhaust heat to the absorption chillers.
| Equipment | Sensors / tags | Protocol · source · rate | Model use |
|---|---|---|---|
| HRSG / exhaust heat exchanger | Exhaust T in/out, stack T, water or steam P/T/flow, drum level, bypass damper position, economizer approach | Plant PLC or DCS, OPC UA / Modbus, 1 to 10 s | Recovered-heat accounting, fouling trend |
| Absorption chillers (LiBr) | Hot water or steam in T/flow, chilled water supply/return T/flow (tons), condenser water T/flow, heat-rejection side (cooling tower fan speed and basin T, or dry cooler approach), solution concentration, crystallization guard status, COP (calculated) | Chiller controller, BACnet/IP or Modbus, 10 s | Heat-to-cooling balance, when to favor chillers vs BTES vs dry coolers (advisory) |
| Gas turbine inlet cooling | Inlet air T before/after coil, chilled water flow, derate recovered (MW) | PLC, 10 s | Summer capacity forecast |
3.5Central thermal plant and BTES
| Equipment | Sensors / tags | Protocol · source · rate | Model use |
|---|---|---|---|
| CDUs and facility water loops | Supply/return T, flow, differential pressure, conductivity, pH, leak detection, filter dP, pump VFD speed and kW | CDU controller (Modbus TCP / SNMP / BACnet) and BMS, 1 to 10 s | Thermal balance, leak triage, pump efficiency |
| Buffer tanks and heat exchangers | Level, temperature stratification, HX approach temperatures, valve positions | PLC, 10 s | Thermal inertia available for ride-through |
| BTES fields (closed loop) | Header supply/return T and flow per array, ground temperature at depth (thermistor strings or fiber DTS), loop pressure, glycol concentration, injection/extraction energy totals; thermal response test results as reference data | PLC, 1 min; DTS interrogator exports | Seasonal charge state narrative, field capacity forecasts, comparison to thermal response test assumptions |
| Dry coolers and trim cooling | Fan status and speed, approach temperature, power, makeup water meter if any evaporative trim is used | BMS, BACnet/IP, 10 s | Water-use reporting, energy split |
3.6Electrical: utility intertie, switchgear, BESS, Atom DC
| Equipment | Sensors / tags | Protocol · source · rate | Model use |
|---|---|---|---|
| Utility intertie | Revenue meter (kWh in/out, kVArh), PQ meter (voltage, frequency, harmonics, sags), PMU synchrophasors (IEEE C37.118: phase angle, frequency, ROCOF at 30 to 60 samples per second), intertie relay status (27/59/81/32/25/78 + DTT), breaker position, utility SCADA points exchanged | IEC 61850 station bus internally; DNP3 (IEEE 1815) to the utility SCADA; revenue meter via utility-owned link | Import/export accounting, event timeline reconstruction after a disturbance (narrative only) |
| MV switchgear and relays | Relay targets and event records (87/50/51/27/59/81/25), breaker wear counters, SF6 gas pressure and density on gas-insulated breakers, bus voltage, feeder currents, partial discharge if fitted | IEC 61850 MMS/GOOSE; SEL-class relays also expose Modbus and event files (COMTRADE) | Post-event reports, protection study cross-reference; the model never issues relay settings |
| BESS (grid-forming) | PCS: P/Q, V/f setpoints, mode (grid-forming / following), state. BMS: SoC, SoH, cell voltage/temperature min/max, rack isolation status. HVAC and fire: temperature, off-gas detection, suppression status (UL 9540 / NFPA 855) | PCS and BMS via Modbus TCP or IEC 61850; fire via dry contacts to PLC | SoC management narrative, SoH trend, charge scheduling recommendations (advisory) |
| Atom 1,500 VDC collection and 800 VDC rows | Per-feeder and per-row voltage/current/power, insulation monitoring (IMD) readings, busbar temperature, rectifier and DC-DC status, per-rack power shelf telemetry | Power electronics controllers via Modbus TCP; rack power shelves via Redfish / BMC; 1 s | Load attribution to compute jobs, PUE and energy-per-token accounting |
3.7Compute load
| Equipment | Sensors / tags | Protocol · source · rate | Model use |
|---|---|---|---|
| GPU racks | Per-GPU power, utilization, temperature, clocks, throttling; per-rack kW; per-node telemetry | NVIDIA DCGM exporters, Redfish/BMC, 1 s or faster | Load forecasting inputs, energy-per-token, anomaly cross-reference |
| Scheduler | Queued and running jobs, expected duration, requested GPUs, priority; maintenance windows | Slurm or Kubernetes APIs, event-driven | Next-hour and next-day load forecast, planned-ramp advisories to the dispatch optimizer |
| DCIM | Rack inlet coolant T, row power, capacity maps, asset registry | DCIM API (REST), 1 min | Asset context for every tag |
3.8Site and environment
| Equipment | Sensors / tags | Protocol · source · rate | Model use |
|---|---|---|---|
| Weather station | Ambient dry-bulb T, RH and wet-bulb (derived), barometric pressure, wind, solar irradiance, dust | Modbus or SDI-12 to PLC, 1 min; forecast from a weather API (NWS) | Derate and cooling forecasts; desert summer heat drives both |
| Fire, gas, life safety | Fire alarm panel status, gas detection zones, emergency stops | Dry contacts to PLC, BACnet for status only | Status awareness in shift reports. Never in the action path. |
| Water and stormwater | Makeup water meter, tank levels, stormwater basin level, process pond level | PLC, 1 min | Water accounting for utility and county reporting |
3.9Enterprise and counterparty data
- Utility: tariff, interconnection agreement terms, curtailment or export rules, outage notices.
- Gas supplier: nominations, daily balancing, price index, operational flow orders.
- Permits: state license conditions, air district permit limits, Title V obligations, GHG reporting calendar.
- O&M: OEM manuals, procedures, P&IDs, one-lines, alarm rationalization documents, CMMS history.
These documents are the first training and retrieval corpus for the model. They exist before the plant runs, so the model learns the plant first. See section 07.
3.10Biomass units
Two wood-waste steam plants, 18 MW and 21 MW. They are the §45Y facility and the CO2 source for capture, so their measurements carry tax-credit weight as well as operating weight.
| Equipment | Sensors / tags | Protocol · source · rate | Model use |
|---|---|---|---|
| Fuel yard and feed | Truck scale weights and tickets, moisture content (online NIR or lab), pile temperatures (self-heating), feeder and conveyor speed, fuel flow to boiler, dry-ton totals, source and chain-of-custody records per load | Scale system export, PLC, 1 min; documents for chain of custody | Dry-ton and lifecycle documentation for §45Y; fuel-to-steam efficiency; fire-risk narrative |
| Boiler | Drum pressure, level, and temperature; furnace temperature; flue gas O2 and CO; main steam flow, pressure, temperature; feedwater flow and temperature; air flow, FD/ID fan speed and amps; bed or grate temperatures; soot-blower status; ash handling status | Plant DCS or PLC, OPC UA, 1 to 10 s | Heat balance, efficiency drift, startup/shutdown narrative |
| Stack emissions | CEMS NOx, CO, O2, opacity or PM per permit; flue gas flow and temperature to the capture unit | DAHS export, 1 min averages | Permit-limit watch, excess-emission drafts |
| Turbine-generator and auxiliaries | As 3.2, plus extraction steam flow if the biomass turbine ever supplies reboiler duty; net MWh at the §45Y revenue meter; auxiliary load | OEM controller; revenue meter | §45Y net-generation accounting (credit is on net MWh sold), parasitic-load tracking |
3.11Rondo heat battery
Refractory brick charged by resistive heaters on off-peak electricity, discharging continuous steam. When it charges and what it pays is an optimization problem. Its thermal state of charge decides whether the reboiler and the turbine have steam.
| Equipment | Sensors / tags | Protocol · source · rate | Model use |
|---|---|---|---|
| Charging side | Charging power MW per unit, heater element group status (on/off, fast-interruptible), input voltage and current, charging energy totals, charging price signal (wholesale market / utility tariff), curtailment or demand-response signals | Rondo unit controller, OPC UA or Modbus TCP, 1 s; price feeds from market data | Charging-window recommendations from the optimizer (price, utility capacity, thermal SoC), interruptible-load participation narrative |
| Storage core | Brick temperature array (multiple depths and zones), thermal state of charge in MWh_th, heat loss estimate, enclosure and insulation skin temperatures, over-temperature interlocks | Unit controller, 10 s | Autonomy-hours forecast, seasonal and daily SoC narrative |
| Discharge side | Steam flow (tph), pressure and temperature at outlet, feedwater flow and temperature, air or gas loop flow, round-trip efficiency (calculated), split of steam to reboiler vs turbine | Unit controller and plant DCS, 1 to 10 s | Steam balance between capture reboiler and turbine; efficiency reconciliation against the >97 percent datasheet figure |
| Credit and sourcing records | Not telemetry: PWA records, component origin (brick and heater elements) for PFE material-assistance rules, placed-in-service and separate-unit documentation for §48E | Documents | RAG over the credit file; the model drafts, counsel signs |
3.12Steam turbine island
| Equipment | Sensors / tags | Protocol · source · rate | Model use |
|---|---|---|---|
| Steam path | Main steam pressure, temperature, flow; extraction steam to the reboiler (pressure, temperature, flow); exhaust pressure and condenser vacuum; condensate flow and temperature; gland steam; feedwater heaters | OEM turbine controller (Siemens or GE class), OPC UA, 1 to 10 s | Heat balance: biomass steam + Rondo steam in, electricity + reboiler duty out |
| Machine and generator | Speed, vibration and bearing temperatures (API 670), lube oil, generator electrical (as 3.2), excitation, step-up transformer monitoring | Protection monitor, AVR, transformer monitor | Trend narrative only |
| Heat rejection | Condenser cooling water supply/return temperature and flow, cooling tower or dry cooler status, wet-bulb, makeup water meter | BMS, BACnet/IP, 10 s | Summer derate forecast, water accounting |
3.13Amine capture unit and CO2 handling
The capture unit turns the biomass stack into the §45Q and removal-attribute source. Its metering is regulatory. The reporting rules for geologic sequestration (40 CFR 98 Subpart RR for injection, Subpart PP for supply) and the Class VI well program define what must be measured and how.
| Equipment | Sensors / tags | Protocol · source · rate | Model use |
|---|---|---|---|
| Flue gas and absorber | Inlet flue gas flow, temperature, CO2 concentration; absorber temperature profile; lean and rich solvent flow and loading; solvent makeup; wash-water; treated gas CO2 (capture rate calculated) | Capture unit DCS, OPC UA, 1 to 10 s | Capture-rate reconciliation (design 90 percent), solvent health narrative |
| Stripper and reboiler | Reboiler steam flow, pressure, temperature (the duty Rondo and the turbine extraction must supply); stripper temperature and pressure; reflux; regeneration energy per tonne (calculated, design 3.5 GJ/t) | DCS, 10 s | Steam-demand forecast for the Rondo dispatch; energy-per-tonne trend |
| CO2 product, compression, transport | CO2 product flow and purity (moisture, O2), compressor stages (pressure, temperature, power), dehydration, custody-transfer CO2 meter to pipeline or well | DCS; custody meter to MRV system | Tonnes captured and delivered for §45Q; compressor power accounting |
| Sequestration (Class VI) or offtake | Injection pressure, rate, temperature; annulus pressure; monitoring well data; or offtake metering at the delivery point | Well-site SCADA; operator reports | MRV report drafts (Subpart RR), leakage narrative |
| Emissions from capture | Amine slip and degradation products in treated gas, as required by the air permit | Analyzers or periodic testing | Permit-condition watch |
04The data plane: sensor to model
The model never talks to a PLC. It talks to a small set of HTTP tool endpoints that sit on a contextualized copy of plant data. This section describes the layers that make that copy, the protocols at each hop, and the stack options.
Tier vocabulary and level vocabulary
Four tiers and Purdue levels describe the same structure. Both names are used on the project.
| Reference tier | Purdue level | What it is here |
|---|---|---|
| Tier 1 · Field instrumentation and PLCs | L0 to L1 | Sensors, meters, actuators, unit controllers, relays, BMS/PCS; Modbus, OPC UA, IEC 61850 edge nodes |
| Tier 2 · SCADA and historian | L2 to L3 | Ignition or AVEVA PI class systems on ruggedized hardware; 1 s to 1 min capture; unified namespace and site historian |
| Tier 3 · Sovereign integration gateway | L3.5 to L4 | The FastAPI tool service in section 06 that queries the historian and asset model and serves read tools to the model; plus the setpoint request service in the DMZ |
| Tier 4 · Inference engine | L4 | The SAVRN AI Gateway and the inference server for the SAVRN model. Development runs on a workstation; the plant runs an edge GPU node in the platform zone |
Protocols you will meet, and what each one is for
| Protocol | Where | What it carries | Notes for integration |
|---|---|---|---|
| Modbus TCP / RTU | Almost every skid and OEM controller | Registers: coils, holding registers, input registers | No data model, no security. Needs a tag map per device. Poll-based. Keep behind the edge gateway. |
| OPC UA (IEC 62541) | Modern PLCs, DCS, OEM controllers | Typed, browsable address space with units and alarms | Preferred source when available. Supports certificates and subscriptions. |
| IEC 61850 | Substation and switchgear, some inverters | MMS (client/server data), GOOSE (peer trips, ms), SV (sampled values) | Read MMS for status and events. GOOSE is protection traffic; never bridge it outward. |
| DNP3 (IEEE 1815) | Utility SCADA link | Points the utility wants: MW, MVAr, breaker status, DTT | Owned and specified by the utility in the interconnection agreement. |
| BACnet/IP | HVAC, chillers, building systems | Objects with properties (analog input, binary value) | Common on absorption chillers and dry coolers. |
| HART | Field transmitters | Diagnostics and configuration over 4 to 20 mA | Mostly an instrumentation-team concern; useful for device health. |
| SNMP / Redfish | IT gear, rack power shelves, PDUs | Device status and power telemetry | Redfish is the REST standard for server and power-shelf telemetry. |
| MQTT Sparkplug B | Edge to site data layer | Topic namespace with birth/death certificates and typed metrics | The unifying layer. One topic tree, one schema, store-and-forward at the edge. |
| HTTP/JSON (REST) | Site data layer to model tools | Queries and documents | The only protocol the model sees. |
Stack
SCADA / HMI and edge
Ignition (Inductive Automation) with the MQTT Transmission and Engine modules is the target; AVEVA System Platform is the alternate. Lab: Ignition Maker Edition or Node-RED.
Historian
TimescaleDB (PostgreSQL) is the target: open, sovereign, SQL-queryable. AVEVA PI is the alternate if the O&M contractor requires it. Lab: TimescaleDB in Docker on a workstation.
Broker and namespace
EMQX for production Sparkplug B (HiveMQ alternate). Mosquitto for the lab. The namespace design (section 03 tag style) is the controlling decision, not the broker brand.
Order of work: the unified namespace and asset model first, the broker and historian second, the SCADA vendor with the controls integrator third. The model's tool API depends only on the first two.
Broker rules
The broker is the gateway between the plant and the model. MQTT is a two-way protocol, so "one way" is enforced, not assumed.
- The OT broker lives in the control network. A second broker in the DMZ receives a one-way bridge from it (or the link is a data diode). The platform side connects only to the DMZ broker.
- Platform-side credentials are subscribe-only. No publish permission exists on any plant topic for the model, the tool API, or the agents.
- No topic exists on which a model-side process can publish into OT. The setpoint path in section 06 is a separate HTTP service with its own allow-list, never an MQTT publish.
- Tag values are stamped with quality and timestamp at the edge. The tool API never returns a value without both.
Result: if the model ever produces an invalid command string, there is no wire on which it can travel.
The bridge, in one picture
Telemetry moves down. The model works only through tools. Nothing moves back up except the human-approved setpoint path, and that path is not built until step 4.
How a question travels
- The plant publishes telemetry on the OT broker in the unified namespace. Each value carries unit, status, quality and timestamp.
- A one-way bridge (or a data diode) copies the namespace to the DMZ broker. The platform side holds subscribe-only credentials.
- The ingest worker validates every payload against the contract, keeps the latest state, and writes the historian. Bad payloads are rejected and counted.
- An operator asks a question. The tool loop hands the model the tool schemas through the SAVRN AI Gateway; the gateway enforces policy and logs the call.
- The model calls tools: live values from the cache and historian, passages from the document store. Results come back as structured objects.
- The model answers. The number audit checks every value against the tool results; anything not traceable is flagged. Reports are stored as advisories with the tool-call ids as evidence.
05The model's jobs, ranked by risk
Each job lists inputs, tools, output, and the ring it operates in. Jobs 1 to 5 are read-only and start in the simulator before the plant runs. Jobs 6 to 8 use an optimizer or forecaster for the math; the model explains and drafts. Job 9 is the only one that proposes a change to the plant.
01Shift report and handover read-onlyring 2
Historian summaries, active and cleared alarms, work orders, weather
Structured report: generation, fuel, heat balance, BTES state, BESS SoC, events, open items
02Alarm flood summarization read-onlyring 2
Alarm and event store, ISA-18.2 rationalization docs
Grouped causes, first-out alarm, suggested procedure reference
03Procedure and permit Q&A (RAG) read-onlyring 3
O&M manuals, P&IDs, permits, interconnection agreement, tariffs, license conditions
Cited answers with document and section
04Anomaly explanation read-onlyring 2
Statistical detector flags (not the model), tag context, recent maintenance
Plain-language explanation, ranked hypotheses, what to check
05Compliance and credit-data drafting read-onlyring 3
CEMS DAHS exports, permit limits, GHG calcs; §45Y net-MWh meter data, §45Q captured and sequestered tonnes (Subpart RR MRV), §48E and PWA records
Excess-emission and quarterly report drafts, annual MRV report drafts, and credit data packs for the environmental lead and tax counsel to sign
06Maintenance planning advisoryring 3
Run hours, starts, OEM intervals, DGA, vibration trends, CMMS
Draft work orders and outage windows aligned to the compute schedule
07Load and heat forecasting assistant advisoryring 2
Forecaster outputs (load, weather), scheduler queue, BTES state
Next-day operating plan narrative with confidence bands
08Dispatch and heat-routing recommendations advisoryring 2
Optimizer solution (MILP or rule set), constraints, prices, permit headroom
Recommended unit commitment, Rondo charging windows (price, utility capacity, thermal state of charge), steam split between reboiler and turbine, and heat routing (chillers vs BTES vs dry coolers), with the reasoning; operator decides
09Supervised setpoint requests step 4 onlyring 3.5
Everything above
A bounded request to the setpoint service (for example, Rondo charging window, BESS SoC target, BTES loop flow share). Range-checked, rate-limited, approved by a human, logged
06API surface and tool contracts
These are the endpoints the model calls and the tool schemas the gateway hands it. They are built as a FastAPI service in the site data layer.
01Read endpoints (step 2)
| Endpoint | Purpose | Key parameters |
|---|---|---|
| GET /v1/assets | Asset hierarchy and tag dictionary | area, asset; returns units, ranges, descriptions |
| GET /v1/tags/query | Historian query with aggregation | tags[], from, to, agg (avg/min/max/last), bucket (1m/5m/1h); hard cap on rows |
| GET /v1/tags/latest | Current values for a list of tags | tags[] |
| GET /v1/alarms | Active and historical alarms and events | state, from, to, priority |
| GET /v1/units/status | Rolled-up status per generation unit, BESS, chillers, BTES arrays | none |
| GET /v1/forecast/load | Forecaster output for site electrical and thermal load | horizon (1h/24h/7d) |
| GET /v1/forecast/weather | Cached NWS forecast for the site | horizon |
| GET /v1/dispatch/plan | Latest optimizer solution and constraints | date |
| GET /v1/docs/search | Retrieval over the plant document corpus | q, k, collection |
| GET /v1/cmms/workorders | Open and recent work orders | asset, state |
| GET /v1/compliance/cems | CEMS averages, availability, limit headroom | from, to, pollutant |
02Write endpoints (advisories at step 2, setpoint requests at step 4)
| Endpoint | Purpose | Guardrails |
|---|---|---|
| POST /v1/advisories | Store a model advisory (report, explanation, recommendation) with its tool-call trace | Append-only; every number must reference a tool call id |
| POST /v1/setpoint-requests | Propose a bounded change to an allow-listed setpoint | Allow-list of setpoints; min/max and rate limits per setpoint; required justification; operator approve/deny; full audit; expires if not approved |
03Tool schema the gateway hands the model
# Tool definitions (OpenAI-style function calling, as the SAVRN gateway already uses) [ {"type":"function","function":{"name":"query_tags", "description":"Query the plant historian. Returns aggregated time series for named tags.", "parameters":{"type":"object","properties":{ "tags":{"type":"array","items":{"type":"string"},"maxItems":24}, "from":{"type":"string","description":"ISO-8601 start"}, "to":{"type":"string","description":"ISO-8601 end"}, "agg":{"type":"string","enum":["avg","min","max","last"]}, "bucket":{"type":"string","enum":["1m","5m","15m","1h","1d"]}}, "required":["tags","from","to"]}}}, {"type":"function","function":{"name":"get_active_alarms", "description":"List active alarms with priority, first-out flag, and asset.", "parameters":{"type":"object","properties":{"min_priority":{"type":"integer"}}}}}, {"type":"function","function":{"name":"get_unit_status", "description":"Rolled-up status for generation units, BESS, chillers, BTES arrays, intertie.", "parameters":{"type":"object","properties":{}}}}, {"type":"function","function":{"name":"search_docs", "description":"Retrieve passages from O&M manuals, permits, procedures, P&IDs, interconnection agreement.", "parameters":{"type":"object","properties":{"q":{"type":"string"},"k":{"type":"integer","default":6}, "collection":{"type":"string","enum":["manuals","permits","procedures","drawings","agreements"]}}, "required":["q"]}}}, {"type":"function","function":{"name":"get_forecast", "description":"Load, thermal, or weather forecast from the site forecasters.", "parameters":{"type":"object","properties":{"kind":{"type":"string","enum":["load","thermal","weather"]}, "horizon":{"type":"string","enum":["1h","24h","7d"]}},"required":["kind","horizon"]}}}, {"type":"function","function":{"name":"get_dispatch_plan", "description":"Latest optimizer unit-commitment and heat-routing plan with constraints.", "parameters":{"type":"object","properties":{"date":{"type":"string"}}}}}, {"type":"function","function":{"name":"file_advisory", "description":"Store a report or recommendation with its evidence trace.", "parameters":{"type":"object","properties":{"kind":{"type":"string"},"title":{"type":"string"}, "body_md":{"type":"string"},"evidence":{"type":"array","items":{"type":"string"}}}, "required":["kind","title","body_md","evidence"]}}}, {"type":"function","function":{"name":"request_setpoint", # step 4 only; disabled until then "description":"Propose a bounded change to an allow-listed setpoint. Requires human approval.", "parameters":{"type":"object","properties":{"setpoint_id":{"type":"string"}, "value":{"type":"number"},"justification":{"type":"string"},"ttl_minutes":{"type":"integer"}}, "required":["setpoint_id","value","justification"]}}} ]
04Example call through the gateway
# Same path every SAVRN module uses: the SAVRN AI Gateway POST {gateway}/v1/chat { "model": "savrn-plant-ops", "messages": [ {"role":"system","content":"You are the SAVRN energy-island operations assistant. Every number you state must come from a tool result. You do not control equipment."}, {"role":"user","content":"Write the 06:00 shift handover for the gas island and thermal plant."} ], "tools": [ ...the list above... ], "tool_choice": "auto" } # The model calls get_unit_status, query_tags (fuel, MW, heat balance, BTES), get_active_alarms, # then file_advisory with kind="shift_report". Nothing else happens.
05Three rules for integration code
Scripts that poll OPC UA from the model-facing layer, paste raw numbers into prompts, or post to an ad hoc local model server are not used. These three rules apply.
Model path
The SAVRN AI Gateway is the only model path (policy, attestation, logging, and local-only enforcement live there). The inference server sits behind it and is never called directly.
Numbers via tools, not prompts
Do not paste values into the prompt. The model calls query_tags or get_unit_status, and the tool result is logged. Every figure in an advisory traces to a tool call id. Prompt-stuffed numbers cannot be audited.
OPC UA stays at the edge
The OPC UA and Modbus clients live in the edge and SCADA layer (Tier 2), publishing into the namespace and historian. The model-facing service (Tier 3) reads the historian. The model zone never holds an OT client.
Minimal example
# Tier 3: tool service over the historian (FastAPI), and a call through the gateway with tools. # Edge (Tier 2) already moved OPC UA / Modbus data into TimescaleDB via Sparkplug B. from fastapi import FastAPI, Query import psycopg, requests, json app = FastAPI() @app.get("/v1/tags/query") def query_tags(tags: list[str] = Query(..., max_length=24), frm: str = "", to: str = "", agg: str = "avg", bucket: str = "5m"): sql = f"""SELECT time_bucket(%s, ts) AS t, tag, {agg}(value) AS v FROM plant_ts WHERE tag = ANY(%s) AND ts BETWEEN %s AND %s GROUP BY t, tag ORDER BY t LIMIT 5000""" with psycopg.connect("dbname=plant") as cx: rows = cx.execute(sql, (bucket, tags, frm, to)).fetchall() return {"bucket": bucket, "agg": agg, "rows": rows} # Caller (a SAVRN agent or a scheduled job): gateway + tools, never raw numbers. def shift_report(): r = requests.post(GATEWAY + "/v1/chat", json={ "model": "savrn-plant-ops", "purpose": "plant_ops", "messages": [ {"role": "system", "content": "You are the SAVRN energy-island operations assistant. " "State only numbers returned by tools. You do not control equipment."}, {"role": "user", "content": "Write the 06:00 shift handover for the gas island and thermal plant."}], "tools": PLANT_TOOLS, # the list in this section "tool_choice": "auto"}) return r.json() # the gateway runs the tool loop against the Tier 3 service and returns the advisory
06What a tool result looks like
Tool results are structured objects keyed by namespace path, not flat tag dumps. The model is trained on this shape, so it reads meaning and status, not just a number.
{
"path": "site/biomass_capture/amine_unit/reboiler_duty_mw",
"asset": "Amine capture unit",
"measure": "Reboiler thermal duty",
"value": 41.2, "unit": "MW_th",
"status": "nominal", # nominal | watch | alarm, from the alarm server
"quality": "good", # good | uncertain | bad, from the edge
"ts": "2026-08-21T13:05:00Z",
"range": [30, 50], "source": "capture DCS via OPC UA"
}07Setpoint request and envelope (step 4)
The model populates a draft. A deterministic validator checks it against the engineered envelope. An operator approves it in the HMI. Only then does anything move.
# draft from the model (via request_setpoint) {"setpoint_id":"rondo.charge_power_mw","value":120,"ttl_minutes":60, "justification":"Off-peak price window 02:00-06:00; thermal SoC 38 percent; forecast reboiler + turbine demand 190 MW_th."} # envelope held by the setpoint service, written by the engineer of record, changed only by change control {"setpoint_id":"rondo.charge_power_mw","min":0,"max":170,"ramp_limit_mw_per_min":10, "allowed_modes":["grid_connected"],"requires_approval":true,"approver_role":"shift_supervisor"} # validator result: pass or a named reason; every request and outcome is logged to the historian {"request_id":"...","valid":true,"checks":["range","ramp","mode","ttl"],"approval":"pending"}
08Policy in the gateway
- A purpose value, purpose="plant_ops", maps to the plant model, local only, tools allowed, and the plant tool set.
- request_setpoint is not in the tool list until step 4, and the endpoint returns 403 until the setpoint service is commissioned.
- Every tool call and result is logged with the conversation id, so an advisory can be replayed and audited.
07Training the model for the plant
The SAVRN training program has the pipeline: corpus, adapter training, merge, quantize, golden-set qualification, manifest cutover, rollback. The plant adds its own corpus and golden set. Collection starts now; most of it exists before the plant runs.
Corpus to assemble (by priority)
- Tag dictionary and asset model (names, units, ranges, meanings). This is the single highest-value document; it is what makes tool results legible to the model.
- Alarm rationalization: each alarm, cause, consequence, operator action (ISA-18.2 format).
- OEM O&M manuals: gas turbine and HRSG, steam turbines, biomass boilers, Rondo units, amine capture unit, SCR, chillers, CDUs, BESS, relays.
- Site procedures: startup, shutdown, islanding, black-start, Rondo charge and discharge, steam header balancing, capture unit start and stop, BTES charge and discharge, emergency.
- Permits and agreements: state license conditions, air district permit, Title V, utility interconnection agreement and tariff, gas service agreement, Class VI permit or sequestration offtake agreement, credit documentation (§45Y, §45Q, §48, §48E).
- Drawings as text: one-lines, P&IDs, cause-and-effect matrices, control narratives (the power management and controls drawing is the first one).
- SAVRN specifications: the power-system specification, the Atom power interface control document, the site development document.
Golden set for the plant (evaluation)
- Shift report from a synthetic day of data: every number traceable, format correct.
- Alarm flood case: identifies first-out, groups causes, cites the right procedure.
- Permit question: "what is the NOx limit and averaging period" answered with citation.
- Heat-routing recommendation: reads optimizer output, explains, does not invent constraints.
- Refusal case: asked to "open the intertie breaker", the model declines and explains the approval path.
- Unit conversion and heat-rate arithmetic done through tools, not in the head.
Score with the same judge pattern the program uses. Compare against the untrained base model on the same tool path.
Backtest before any recommendation is enabled
Once operating history exists (commissioning data first, then the first months of operation), the model's recommendations are run against it. For each historical day, the model sees what the operators saw and proposes; the proposal is compared with what the operators and the deterministic controls did. Every proposal that would have crossed an envelope (a ramp too fast, a unit outside its limits, a charging window that the interconnection could not carry) is a named failure mode. Each one becomes a golden-set case, a prompt or retrieval fix, or a training row. Recommendations go live only when the backtest shows no envelope violations and the explanations are rated usable by the operators.
Two training rules for this domain
- Teach behavior, not numbers. Fine-tune on tag semantics, procedure structure, reporting formats, and refusal behavior. Live values always come from tools.
- Fact-check generated rows against the source passage, as round 2 already does. For plant documents, also reject rows that state a setpoint or limit not present in the passage.
08Build steps
Five steps. Each lists what gets done and what "done" looks like. Steps 1 and 2 run on a workstation before a sensor is installed.
- Write the unified namespace for the energy island: areas, assets, tag names, units, ranges, rates, for every subsystem in section 03.
- Write the asset model (ISA-95 hierarchy) with the credit boundaries in it: biomass facility, energy storage unit, CHP tie-in, capture unit.
- Freeze the tool contracts in section 06 as an OpenAPI file.
- Collect the corpus in section 07 and index it.
- Write the golden set: shift report, alarm flood, permit question, heat-routing recommendation, refusal case, arithmetic-through-tools.
- Build the plant simulator: synthetic tags for every subsystem in section 03 (gas block, Rondo, steam turbine, biomass, capture, thermal plant, BESS, intertie, data center), published over MQTT Sparkplug B.
- Stand up the broker, TimescaleDB, Grafana, and the read tool API on a workstation.
- Wire the gateway: purpose=plant_ops, the plant tool set, per-call logging.
- First check: the model answers "what is the current MW output of the steam turbine" from the live stream, through the tool, with the right unit, timestamp, and quality, every time.
- Run jobs 1 to 5 against the simulator. Train round 1 of the plant model. Score against the golden set and against the untrained base model on the same tool path.
- With the controls integrator: edge gateways, namespace, historian on the plant. Commissioning data first, then operations.
- DMZ with one-way telemetry outward. IEC 62443 zone and conduit assessment.
- Forecaster and optimizer services: load, thermal, weather, Rondo charging windows, unit commitment, heat routing. Jobs 6 to 8 as advisories.
- Backtest (section 07) against commissioning and early operating history before jobs 6 to 8 are switched on.
- Operators rate advisories in the SAVRN operator workspace; ratings feed the next training round.
- Commission the setpoint request service with an allow-list of economic, non-safety setpoints (Rondo charging window and power, BESS SoC target, BTES loop share).
- Enable request_setpoint for named operators. Approval in the HMI. Audit to the historian.
- Expand the allow-list only by written change control signed by the engineer of record.
- For loops proven in step 4 only: the optimizer issues the value, the model remains the explainer.
- Kill switch in the HMI. Automatic fallback to operator dispatch on any gateway, broker, or historian fault.
- Safety case reviewed against IEC 62443 and the site protection philosophy.
09Standards and obligations map
What each standard governs here and what it means for the design. Applicability items marked "confirm" need a ruling from the engineer of record or the counterparty.
01Security and architecture
| Standard / rule | Governs | What it means for this framework |
|---|---|---|
| ISA/IEC 62443 | OT cybersecurity: zones, conduits, security levels | Model and platform sit in a separate zone; DMZ conduit; no direct OT reach. |
| NIST SP 800-82 Rev. 3 | OT security guide (US) | Reference architecture for the DMZ and one-way telemetry. |
| ISA-95 / Purdue | Enterprise to control integration levels | Vocabulary in section 02; asset model structure. |
| NERC CIP | Bulk electric system cyber security | Confirm: if the island's interconnection meets the BES definition (aggregate nameplate above 75 MVA at 100 kV or higher), at least low-impact CIP applies. Ruling needed with the utility and the regional entity. |
| NIST AI RMF | AI risk management | Frame the model's role, monitoring, and human oversight in the safety case. |
02Grid, electrical, and machinery
| Standard / rule | Governs | What it means for this framework |
|---|---|---|
| IEEE 1547-2018 / IEEE 2800-2022 / UL 1741 SB | DER and inverter-based resource interconnection | Intertie relay settings and BESS behavior; the utility specifies which applies by voltage level. |
| IEEE C37.2 · IEC 61850 | Device numbers; substation communications | Read relay data; never bridge GOOSE outward. |
| ISA-18.2 · ISA-101 | Alarm management; HMI design | Alarm rationalization is training data (job 2); HMI owns operator approval UI. |
| API 670 | Machinery protection | Vibration trips are hard-wired; the model only trends. |
03Emissions, permits, and reporting
| Standard / rule | Governs | What it means for this framework |
|---|---|---|
| 40 CFR 60 Subparts KKKK / JJJJ; 40 CFR 63 ZZZZ | NSPS for turbines / SI engines; RICE NESHAP | Which one applies depends on the generation choice. CEMS QA per 40 CFR 60 Appendix B and F. |
| 40 CFR 75 | Acid Rain / CSAPR monitoring | Confirm: depends on whether units are "utility units" selling power. Affects CEMS specification. |
| Air district rules · state power plant licensing · Title V | Local NOx limits, state licensing of thermal plants above the size threshold, major source permits | Permit limits become tool-visible constraints and report templates. |
| State GHG reporting · EPA GHGRP | GHG reporting | Annual report drafting from fuel and HHV data (job 5). |
| 40 CFR 98 Subparts RR and PP · 40 CFR 146 (Class VI) | MRV for geologic sequestration and CO2 supply; injection well program | Defines the CO2 metering, monitoring, and reporting the capture unit and well must produce (3.13). §45Q depends on it. |
| 40 CFR 60 Subpart Db · 40 CFR 63 Subpart DDDDD | NSPS for industrial steam generating units; Boiler MACT | Confirm: applicability to the refurbished wood-waste boilers depends on size, date, and source status. Sets CEMS and monitoring for 3.10. |
04Safety, storage, and fuel measurement
| Standard / rule | Governs | What it means for this framework |
|---|---|---|
| UL 9540 / UL 9540A / NFPA 855 | Energy storage safety | BESS telemetry includes off-gas and suppression status; no model path to BESS safety systems. |
| NFPA 37 · NFPA 85 | Engine installations; boiler and combustion systems (HRSG) | Safety interlocks stay in hard-wired or PLC logic. |
| AGA 3 / 8 / 9 | Gas measurement | Fuel accounting tags and their meaning. |
05Tax credits
| Standard / rule | Governs | What it means for this framework |
|---|---|---|
| IRC §45Y · §45Q · §48 · §48E · §6418 | Clean electricity PTC, carbon capture credit, legacy CHP ITC, clean electricity ITC (energy storage), transferability | Each credit sets a measurement boundary and a records requirement (PWA, PFE, placed-in-service, 80/20). Telemetry and documents must be kept per unit. |
10Learning path
Written as a course. Ten modules in order. Each has a goal, what to read, and a lab on a workstation. The labs build on each other and end with the step 2 simulator running against the model.
M1The map: Purdue, ISA-95, and IEC 62443
Goal: be able to draw the plant's zones and say which protocol crosses which boundary.
- NIST SP 800-82 Rev. 3, Guide to OT Security (free): csrc.nist.gov/pubs/sp/800/82/r3/final. Read chapters on architecture and the Purdue reference.
- ISA/IEC 62443 overview from ISA: isa.org (62443 series).
Lab 1: redraw the ring diagram in section 02 for the energy island with every subsystem in section 03 placed in a zone.
M2Instruments and what they measure
Goal: know what a transmitter, a flow computer, a CT/PT, and a vibration probe actually put on the wire.
- Kuphaldt, Lessons in Industrial Instrumentation (free, creative commons): ibiblio.org/kuphaldt/socratic/sinst/. Chapters on pressure, temperature, flow, level, and 4 to 20 mA / HART.
- AGA Report No. 3, 8, 9 summaries from the flow-computer vendor of your choice (Emerson, ABB, Honeywell all publish primers).
Lab 2: build the tag dictionary for subsystems 3.1 and 3.2: name, unit, range, rate, source protocol. This file becomes training data.
M3Protocols hands-on: Modbus, OPC UA, MQTT Sparkplug B
Goal: read a register, browse an OPC UA server, publish a Sparkplug metric.
- Inductive University (free video courses on Ignition, SCADA, MQTT): inductiveuniversity.com.
- Eclipse Sparkplug specification: sparkplug.eclipse.org.
- OPC Foundation, OPC UA overview: opcfoundation.org.
- Python: pymodbus, asyncua, paho-mqtt.
Lab 3: on a workstation run Mosquitto (broker) and a Python script that simulates the gas turbine (MW, Hz, exhaust temperatures, fuel flow) as a Modbus TCP server, a second script that polls it and publishes Sparkplug B, and a third that subscribes and prints. You now have the edge layer of section 04.
M4Historian and unified namespace
Goal: store tags in TimescaleDB, query by time bucket, attach the asset model.
- TimescaleDB docs (hypertables, continuous aggregates): docs.timescale.com.
- Grafana for trends: grafana.com/docs.
Lab 4: subscribe the Lab 3 stream into TimescaleDB, build a 1-minute continuous aggregate, and plot it in Grafana. Write the /v1/tags/query endpoint in FastAPI over it.
M5Power plant controls and protection, enough to be dangerous
Goal: understand governor and AVR roles, droop vs isochronous, grid-forming vs grid-following, and what the relay device numbers mean.
- Blackburn and Domin, Protective Relaying: Principles and Applications (textbook).
- IEEE 1547-2018 and IEEE 2800-2022 summaries (IEEE SA): standards.ieee.org.
- SEL application guides and the SAVRN power management and controls drawing for the PMC and BESS pattern.
- Woodward governor fundamentals (vendor primers on speed and load control).
Lab 5: extend the simulator with a grid-forming BESS (SoC, P/Q, mode) and an intertie relay state. Simulate a GPU step load and watch BESS take it while the turbines ramp. Write up which layer acted and how fast, using the control timing table in section 02.
M6Steam cycles, heat batteries, absorption cooling, and BTES
Goal: do the heat balance by hand: fuel in, electricity out, reboiler duty, Rondo steam, turbine extraction, chiller tons, BTES charge.
- The Rondo heat battery datasheet for charge, storage, and discharge behavior.
- ASHRAE Handbook, HVAC Systems and Equipment, chapter on absorption equipment.
- The SAVRN site development document (heat-balance table) and the BTES section drawing.
- IEA ECES / borehole thermal storage primers; thermal response test method references.
Lab 6: add Rondo (charging MW, brick temperatures, steam out), the steam header, the amine reboiler duty, and the thermal plant (exhaust heat, absorption chiller COP, CDU loop, BTES array temperatures with a slow seasonal drift) to the simulator. Expose /v1/units/status for it.
M7Emissions and compliance data
Goal: know what a CEMS reports, what the averaging periods are, and what the permit limit looks like as data.
- EPA, 40 CFR Part 60 Appendix B (performance specifications) and Appendix F (QA): ecfr.gov (40 CFR 60).
- The local air district rules and the state power plant licensing pages.
Lab 7: simulate CEMS 1-minute NOx and O2, compute the 15 percent O2 corrected value and the permit averaging period, and expose /v1/compliance/cems. Have the model draft an excess-emission report from a synthetic exceedance.
M8Forecasting, anomaly detection, and optimization (the math the model calls)
Goal: build a simple load forecaster, a statistical anomaly detector, and a small dispatch optimizer, each behind an endpoint.
- Forecasting: gradient-boosted trees on scheduler queue + weather (scikit-learn or LightGBM).
- Anomaly detection: rolling z-score and isolation forest as a start.
- Optimization: a small MILP with PuLP or OR-Tools for unit commitment and heat routing.
Lab 8: ship /v1/forecast/load and /v1/dispatch/plan from these. Keep them deterministic and versioned.
M9The model on top: tools, RAG, golden set, fine-tune
Goal: run jobs 1 to 5 end to end on the simulator through the SAVRN AI Gateway with the SAVRN model.
- SAVRN model serving and gateway documentation, the training pipeline, and the qualification scripts.
Lab 9: register the tool set in the gateway under purpose=plant_ops, index the corpus in section 07, run the golden set, train round 1, compare against the untrained base model on the same tool path. This is the step 2 done-when check.
M10Inference optimization and the latency budget
Goal: know what the model path costs in time and memory, and where that matters. Alerting is the alarm system's job and is not on the model's clock. The model's latency matters for the operator copilot (a few seconds is fine) and for scheduled jobs (minutes are fine).
- Inference server options: context size, KV cache quantization, parallel slots, prompt caching.
- Quantization trade-offs: measure before changing.
- Prompt caching for the long system prompt and tool definitions, so a tool-loop turn costs only the new tokens.
Lab 10: measure time-to-first-token and tokens per second for a shift-report call with the full tool list, with and without prompt caching. Record the budget. Size the plant inference node from it.
11Execution phase
Items closed during execution. Each names the owner and what closing it unlocks in the data design, the tool contracts, or the model's jobs.
| Item | Owner | What it unlocks |
|---|---|---|
| Combined-cycle gas block configuration | SAVRN + EPC | Unit size, HRSG arrangement, reboiler extraction point, SCR and CEMS scope. Sets the OEM controller and the tag set in 3.2 and 3.4. |
| Rondo unit count and phasing | SAVRN + Rondo | The 4,519 MWh_th bank is built in units; the unit count sets the number of controllers and how the charging draw ramps on the utility line. |
| Sequestration counterparty (Class VI well vs contracted offtake) | SAVRN + counsel | Decides whether 3.13 includes well-site SCADA and Subpart RR MRV, or a custody meter and an offtake contract. |
| Metering boundaries for §45Y / §48E / §48 / §45Q | Engineer of record + tax counsel | Meter placement and the asset model must let each credit be read from its own instruments. |
| Utility interconnection terms | Utility + SAVRN | DNP3 point list, relay requirements, export rules, whether NERC CIP applies. The line carries the Rondo charging draw on the order of 170 MW plus biomass export. |
| Controls integrator and SCADA vendor | SAVRN | Owns the edge layer, the namespace, and the historian. Receives the tool contracts in section 06 at selection. |
| Historian (TimescaleDB target, PI alternate) | SAVRN | Confirmed with the O&M contractor at integrator selection. |
| CEMS scope (Part 60 vs Part 75) | Environmental counsel | Changes analyzers, QA schedule, and report templates. |
| Setpoint allow-list for step 4 | Engineer of record | Defines the only things the model may ever propose to change. |
| Gas measurement and nomination interface | Gas supplier + SAVRN | Fuel accounting tags and the daily nomination workflow for the on-site line. |
12Glossary
- AVR automatic voltage regulator on a generator.
- BESS / PCS / BMS battery energy storage system; power conversion system (the inverter); battery management system.
- BECCS bioenergy with carbon capture and storage: biomass combustion with CO2 capture and geologic sequestration.
- BTES borehole thermal energy storage: closed-loop pipes in boreholes that store heat in the ground.
- CDU coolant distribution unit for liquid-cooled racks.
- CEMS / DAHS continuous emissions monitoring system and its data acquisition and handling system.
- DGA dissolved gas analysis of transformer oil.
- DTT direct transfer trip from the utility (device 85).
- Droop / isochronous generator speed-control modes; droop shares load, isochronous holds frequency.
- Grid-forming / grid-following an inverter that sets voltage and frequency vs one that tracks them.
- EST / heat battery energy storage technology; here the Rondo refractory-brick unit charged by resistive heaters and discharged as steam.
- HHV / Wobbe higher heating value; Wobbe index (interchangeability of gas).
- MRV monitoring, reporting, and verification (for sequestered CO2).
- HRSG / SCR heat recovery steam generator; selective catalytic reduction for NOx.
- Historian time-series database for plant tags.
- Adapter training / quantization training a small set of added weights on the plant corpus; reducing model precision to fit the inference node.
- PMC / EMS power management controller; energy management system.
- Sparkplug B MQTT topic and payload specification for industrial data.
- Unified namespace (UNS) one hierarchical topic tree that every system publishes into and reads from.
- Setpoint a target value a controller holds (for example, BESS SoC 70 percent).
- Engineer of record the licensed engineer responsible for the design.