Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [develop]

## [2.1]

### General
- Fixed bug with strings in PETSc allocated strctures (#61)
- Update dependencies to PETSc >=3.25 and ROCm >= 6.4 (#70)

### User Interface
- Add AgentiGrid experimental agentic AI user interface (#65)
- Refactored visualizer (#69)

### TCOPFLOW
- Fix ramp parsing and GENRAMP indexing in TCOPFLOW (#62)
- Improve preallocation of sparse matrices in TCOPFLOW (#71)


## [2.0]

### General
Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Preamble

cmake_minimum_required(VERSION 3.18)

project(ExaGO VERSION "2.0.0")
project(ExaGO VERSION "2.1.0")

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
Expand Down
9 changes: 3 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,8 @@ Additionally, note that SCOPFLOW and SOPFLOW with HiOp solver use Ipopt to solve

Detailed installation instructions are given at [INSTALL.md](./INSTALL.md) for information on acquiring, building and installing ExaGO.

If you are a developer with access to the project, we also provide public binaries that are generated through our GitHub actions workflows documented in [README.md](.github/workflows/README.md), and with documentation about usage in the packages section of our repository. Check out a short (< 60s) demo of pulling down a version of ExaGO:
If you are a developer with access to the project, we also provide public binaries that are generated through our GitHub actions workflows documented in [README.md](.github/workflows/README.md), and with documentation about usage in the packages section of our repository.

[![asciicast](
https://asciinema.org/a/KCi5TmUXc6zWDj7JYHzfSFxmw.png)](
https://asciinema.org/a/KCi5TmUXc6zWDj7JYHzfSFxmw)

## Developer Guide

Expand Down Expand Up @@ -111,8 +108,8 @@ the guidelines are ambiguous or you have a particular question.
## Authors
ExaGO<sup>TM</sup> was designed and implemented by Shrirang Abhyankar and has
received significant contributions from Slaven Peles, Nicholson Koukpaizan,
Maksudul Alam, Asher Mancinelli, Cameron Rutherford, Joshua Hambrick, Philip
Fackler, Eve Tsybina, Bruce Palmer, Jaelyn Litzinger, William Perkins, Sayef
Samim Konjicija, Maksudul Alam, Asher Mancinelli, Cameron Rutherford, Joshua Hambrick, Philip
Fackler, Eve Tsybina, Shaked Regev, Bruce Palmer, Jaelyn Litzinger, William Perkins, Sayef
Azad Sakin, Joseph Macam, and Ryan Danehy.

## Acknowledgement
Expand Down
4 changes: 2 additions & 2 deletions agentigrid/agentigrid/engine/agent_loop.py
Original file line number Diff line number Diff line change
Expand Up @@ -916,7 +916,7 @@ def _build_extra_args(self) -> list[str] | None:
return args if args else None

def _normalize_sopflow_wind_base(self) -> None:
"""REVIEW (Slaven sign-off): model base-case wind as curtailable for SOPFLOW.
"""REVIEW: model base-case wind as curtailable for SOPFLOW.

case_ACTIVSg200 ships wind generators as must-run (Pmin = Pmax = nameplate),
so any scenario whose wind availability is below nameplate is infeasible in
Expand Down Expand Up @@ -1000,7 +1000,7 @@ def run(self, base_case: Path, goal: str) -> SearchSession:
logger.info("Parsing base case: %s", base_case)
self._base_network = parse_matpower(base_case)
self._current_network = self._base_network
# REVIEW (Slaven sign-off): model base-case wind as curtailable for SOPFLOW
# REVIEW: model base-case wind as curtailable for SOPFLOW
# so scenarios with sub-nameplate wind are feasible (see the method + the
# search.sopflow_curtailable_wind_base flag). No-op for non-SOPFLOW / disabled.
self._normalize_sopflow_wind_base()
Expand Down
3 changes: 1 addition & 2 deletions agentigrid/agentigrid_architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@
| Project | AgentiGrid (in process of integration into ExaGO) |
| Version | 0.3 — PFLOW Direct Optimization |
| Date | May 2026 |
| Author | Samim K., University of Sarajevo |
| Supervisor | Slaven P., Oak Ridge National Laboratory |
| Author | Samim Konjicija, University of Sarajevo |
| Target Platform | Linux (OpenSUSE Leap 15.6), Python 3.10+ |

---
Expand Down
6 changes: 3 additions & 3 deletions agentigrid/claude_code_changes.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Confirmed `_augment_generator_mutation` already pins `Qmin == Qmax` (forced, not

Prompt 13 re-ran an identical sweep 3× (50,504 tokens), prompt 17 2×.
- `agentigrid/prompts/system_prompt.py`: explicit rule "DO NOT RE-RUN AN IDENTICAL SWEEP".
- `agentigrid/engine/agent_loop.py` (deterministic backstop): session-level `_sweep_signature_cache` keyed by `_sweep_cache_key(data)` (mode + entity + mutation + candidate_set + feasibility + metric + predicate + dispatchable/cost params; excludes description/reasoning). An identical re-request is served via `_serve_cached_sweep` (journaled "cached — not re-solved", no re-solve); changed parameters → different signature → still executes. Soft guard, never blocks a changed sweep. **Decision flagged for Slaven:** nudge-only vs. nudge + cache (both implemented here).
- `agentigrid/engine/agent_loop.py` (deterministic backstop): session-level `_sweep_signature_cache` keyed by `_sweep_cache_key(data)` (mode + entity + mutation + candidate_set + feasibility + metric + predicate + dispatchable/cost params; excludes description/reasoning). An identical re-request is served via `_serve_cached_sweep` (journaled "cached — not re-solved", no re-solve); changed parameters → different signature → still executes. Soft guard, never blocks a changed sweep. **Decision flagged for further discussion:** nudge-only vs. nudge + cache (both implemented here).

### Tests — `tests/test_sweep_corrections.py` (15)

Expand Down Expand Up @@ -123,7 +123,7 @@ A **named registry of verified primitives** (Phase 1; not free-form LLM code), e

C2 generator primitive (dispatchable bounds + non-zero cost, fixed-injection regression, explicit coeffs, median mid-merit, fallback); registry (defaults, needs-base, direction, unknown-name raises, extensibility); `max_delta_v` (true max abs diff, max bus ≠ candidate bus, None without base); `reactive_adequacy` (adequate, inadequate-with-reason, non-convergence); standard predicate unchanged; `_augment_generator_mutation` (dispatchable resolution, explicit-strategy error, Q-pin, non-generator untouched); sweep-handler integration (unknown metric/predicate clean error, metric recorded, **default payload unchanged**, dispatched-Pg recorded). Full suite: **868 passed, 3 skipped**.

### Decisions flagged for Slaven (non-blocking)
### Decisions flagged for further discussion (non-blocking)

1. Added-generator cost curve: case-median (default) vs an explicit typical mid-merit curve — drives the prompt-13 ranking entirely.
2. Prompt-15 switched-in load size (`switched_load_mw`) — the voltage step scales with it.
Expand Down Expand Up @@ -173,7 +173,7 @@ For each candidate bus, a bisection on injection magnitude finds the largest inj

System PF + PF-spec; candidate mutation on real ACTIVSg200 (PF ray, generator fixed injection, base untouched); binding identification (thermal/voltage with element, type-only fallback); bisection algorithm via synthetic oracle (boundary within tol, probe bound, cap-not-reached, first-probe-infeasible, convergence-as-infeasible); token-bounded boundary view (full vs summary, top-N bound, descending rank, 2000-bus size bound, grouped undetermined, threshold 0); `map_callables` (index order, exception capture, progress count); `_handle_boundary_sweep` orchestration (journals `max_feasible_mw`, one-LLM-turn invariant, base-infeasible abort, invalid-entity reject). Full suite: 836 passed, 3 skipped.

### Decisions flagged for Slaven (non-blocking)
### Decisions flagged for further discussion (non-blocking)

1. Generator reactive handling: `Qg` free within `±0.4·ΔP` (current default) vs fixed at 0 — affects voltage-limited hosting numbers.
2. PF source for the load prompt: system-average (default) vs each bus's own PF vs a stated PF.
Expand Down
2 changes: 1 addition & 1 deletion agentigrid/launcher/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

**Version:** 1.0
**Date:** 2026-03-27
**Authors:** Samim / Claude (collaborative design)
**Authors:** Samim Konjicija / Claude (collaborative design)

---

Expand Down
2 changes: 1 addition & 1 deletion agentigrid/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
description="LLM-driven iterative simulation and analysis tool for ExaGO",
long_description=long_description,
long_description_content_type="text/markdown",
author="Slaven Peles",
author="Samim Konjicija",
python_requires=">=3.10",
packages=find_packages(exclude=["tests"]),
install_requires=[
Expand Down
2 changes: 1 addition & 1 deletion docs/AgentiGrid_modification_plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ Slice 1 (✅ done): add-entity primitives + binary-feasibility sweep + sweep rep

---

## Open decisions for you / Slaven
## Open decisions

1. Confirm slice ordering — in particular whether B.1 (token view) jumps ahead of C1, given it gates the scaling half of the paper.
2. Prompt 18 (min hot reserve under N-1) is the heaviest single item (SCOPFLOW + custom minimization) — is it in-scope for this paper, or deferred?
Expand Down
Binary file modified docs/manual/ExaGO_Manual.pdf
Binary file not shown.
2 changes: 1 addition & 1 deletion docs/manual/main.tex
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@
%\renewcommand{\Re}{\R}
%\newcommand{\Comment}[1]{}

\newcommand{\exagoversion}{2.0.0}
\newcommand{\exagoversion}{2.1.0}

% Sets and accessors
\newcommand{\Jgen}{J^\mathrm{gen}}
Expand Down
36 changes: 0 additions & 36 deletions ipopt_ref.opt

This file was deleted.

Loading