Tech stack & ingredients · WattIQ EPM Decision Agent
The whole ingredient list — the exact Python packages, the JavaScript libraries, the platform services, the data formats, and the model. Deliberately dependency-light: a small Python surface, zero npm / no frontend framework (vanilla JS + a handful of CDN libraries), and a learning store that swaps backends with one environment variable.
The live service. Every package here is imported at runtime on Render.
standard extras: httptools, websockets, uvloop where available).agent.py / llm.py..xlsx EPM workbooks.poc/.env locally (secrets come from Render's env store in production).INSIGHT_STORE=blob). Imported lazily, shipped so the switch is real..gdx symbols in datasource.py; requires GAMS runtime libraries on the host.poc/context/*/sources.yaml) for governed context retrieval.The rest leans on the stdlib — no extra dependencies:
Not shipped in the image — used by CI and locally.
TestClient for endpoint tests.The frontend is vanilla JavaScript — no React/Vue, no bundler, no package.json.
Six libraries are pulled straight from the jsDelivr CDN at page load.
.pptx) decks client-side.Hand-written vanilla JS across 8 files (app, turn, charts, theater, skill engine, export, brand-export, report),
the native fetch + Server-Sent Events for streaming, and inline SVG for icons and the title illustration.
The browser layer now also includes the Charting Station gallery, story-mode first-chart rendering, and scene-aware export shaping.
Fonts: Inter Sora
Manrope, colours in OKLCH with hex fallbacks.
python:3.11-slim; bakes in code, the EPM workbooks, and the system prompt; runs uvicorn./api/health, deploy history = rollback.learning container). Portable to Azure Cosmos / Foundry by one env var.api.openai.com) running gpt-5.5 — set via OPENAI_BASE_URL + MODEL; the openai SDK also supports Azure OpenAI..gdx parsing. Without it, the app falls back to exported output_csv symbols.External APIs currently called by the running system. Country web-retrieval APIs are governed in prompt/docs but not yet wired as live runtime calls.
openai SDK (OPENAI_BASE_URL, OPENAI_API_KEY, MODEL).INSIGHT_STORE=blob; implemented via azure-storage-blob./api/health for deploy/startup monitoring.data/ — the grounding source of truth.datasource.py when server GAMS runtime is available.output_csv/*.csv) when native GDX read is unavailable.poc/context/*/sources.yaml) for governed external-context retrieval.insights.jsonl + questions.jsonl — the append-only learning corpus (local or Azure Blob).