Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
ad7ed7f
fix(optimization): configure official optimizer models
drewstone Jul 24, 2026
dfb42bc
fix(bench): harden GEPA seat provenance
drewstone Jul 24, 2026
8b39059
feat(optimization): adopt official optimizer methods
drewstone Jul 24, 2026
90f3782
Merge remote-tracking branch 'origin/main' into feat/official-optimiz…
drewstone Jul 24, 2026
561b4eb
chore(release): refresh proposal fixture
drewstone Jul 24, 2026
538818d
docs(optimization): document official engine setup
drewstone Jul 24, 2026
3ae359a
fix(bench): restore strict type safety
drewstone Jul 24, 2026
4cf6f90
feat(optimization): complete official method integration
drewstone Jul 24, 2026
04b8768
Merge remote-tracking branch 'origin/main' into feat/official-optimiz…
drewstone Jul 24, 2026
6d460a9
refactor(improvement): split optimizer execution modules
drewstone Jul 24, 2026
4a2b9df
Merge remote-tracking branch 'origin/main' into feat/official-optimiz…
drewstone Jul 24, 2026
aa0f1dd
refactor(primeintellect): remove private schema versions
drewstone Jul 24, 2026
7b6ed90
feat(optimization): prove official engines end to end
drewstone Jul 24, 2026
a6f4e5f
Merge remote-tracking branch 'origin/main' into feat/official-optimiz…
drewstone Jul 24, 2026
e92ee67
fix(optimization): harden official optimizer execution
drewstone Jul 24, 2026
48167ed
Merge remote-tracking branch 'origin/main' into feat/official-optimiz…
drewstone Jul 24, 2026
66780e1
fix(bench): isolate concurrent optimizer evaluations
drewstone Jul 24, 2026
46b6a2a
Merge remote-tracking branch 'origin/main' into feat/official-optimiz…
drewstone Jul 24, 2026
f71696b
docs(api): lock optimization release version
drewstone Jul 24, 2026
970c1dd
test(fixtures): regenerate for runtime 0.105.0
drewstone Jul 24, 2026
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
23 changes: 23 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,26 @@ jobs:

- name: Verify agent-bench against current agent-runtime
run: pnpm run verify:bench

official-optimizers:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v4

- uses: pnpm/action-setup@v4

- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm

- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install package set
run: pnpm install --frozen-lockfile

- name: Verify packed Runtime with official GEPA and SkillOpt
run: pnpm run verify:official-optimizers
7 changes: 7 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ jobs:
cache: pnpm
registry-url: https://registry.npmjs.org

- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install deps
run: pnpm install --frozen-lockfile

Expand All @@ -40,6 +44,9 @@ jobs:
- name: Verify packed package exports
run: pnpm run verify:package

- name: Verify packed Runtime with official GEPA and SkillOpt
run: pnpm run verify:official-optimizers

- name: Verify agent-bench against this release
run: pnpm run verify:bench

Expand Down
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# Changelog

## 0.105.0

- Add `officialGepa(...)` and `officialSkillOpt(...)` as Runtime adapters over the upstream GEPA and Microsoft SkillOpt implementations in `@tangle-network/agent-eval`.
- Require one complete `OptimizationMethod` for profile improvement and keep final-test scenarios outside optimizer input.
- Authorize every exact execution-capable profile candidate before it reaches an agent.
- Preserve resumed optimizer spend, model identity, package provenance, and separate optimization versus final-test costs in activation receipts.
- Verify released Python packages, pinned source revisions, resume behavior, concurrency, and packed external installs in CI.
- Keep code improvement on Runtime-owned isolated Git worktrees.
- Remove the retired local prompt, profile-diff, campaign OTLP, and record-only optimizer paths.
- Require `@tangle-network/agent-eval` 0.126.x.

## 0.104.0

- Add the Tangle Sandbox exact-process environment provider for verified candidate execution.
Expand Down
218 changes: 176 additions & 42 deletions README.md

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions bench/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# Changelog

## 0.4.0

- Add the resumable SWE improvement loop backed by the official GEPA engine.
- Isolate every concurrent candidate in its own Git worktree and authorize the exact candidate before execution.
- Include the complete Runtime, Bench, and installed SWE judge implementations in resume identity.
- Consume `@tangle-network/agent-runtime` 0.105.x, `@tangle-network/agent-eval` 0.126.6, and `@tangle-network/agent-knowledge` 5.0.1.

## 0.3.8

- Resolve package-owned fixtures and scripts from both source and compiled installs, and prove ToolLLM fixture loading from the packed package.
Expand Down
7 changes: 7 additions & 0 deletions bench/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,13 @@ pnpm install # tsx + link parent

The judge needs only Docker; workers need a model key (Tangle router `TANGLE_API_KEY`, or a direct provider).

Live optimizer scripts require explicit token prices so cost records cannot be guessed.
Use the `REFLECT_` prefix for the general benchmark scripts and `GEPA_OPTIMIZER_` for the SWE arena seat.
For either prefix, set `INPUT_USD_PER_MILLION`, `CACHED_INPUT_USD_PER_MILLION`, `CACHE_WRITE_USD_PER_MILLION`, and `OUTPUT_USD_PER_MILLION`.
The SWE arena seat reads its model from `GEPA_OPTIMIZER_MODEL`, its URL from `GEPA_OPTIMIZER_BASE_URL`, and its key from `GEPA_OPTIMIZER_API_KEY`.
It falls back to the configured driver model, `ROUTER_BASE`, and `TANGLE_API_KEY`.
Missing prices fail before an optimizer model call.

Retain every official per-test log and report before the temporary evaluator directory is removed:

```ts
Expand Down
146 changes: 0 additions & 146 deletions bench/gen6-config.json

This file was deleted.

6 changes: 3 additions & 3 deletions bench/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@tangle-network/agent-bench",
"version": "0.3.8",
"version": "0.4.0",
"type": "module",
"description": "The unified benchmark suite for agent-runtime agents: 31 adapters (commit0, enterpriseops-gym, ragbench, crag, nomiracl, open-rag-bench, t2-ragbench, tau3-banking, bfcl, finresearchbench, …) behind one resolveAdapter registry, each with a real judge or fail-loud unsupported scorer. Score any profile/skill/prompt change against them. Map: bench/HARNESS.md.",
"repository": {
Expand Down Expand Up @@ -40,9 +40,9 @@
"verify:pier": "tsx scripts/verify-pier-pair.mts"
},
"dependencies": {
"@tangle-network/agent-eval": "0.125.0",
"@tangle-network/agent-eval": "0.126.6",
"@tangle-network/agent-interface": "0.32.0",
"@tangle-network/agent-knowledge": "^4.1.0",
"@tangle-network/agent-knowledge": "5.0.1",
"@tangle-network/agent-runtime": "workspace:*",
"@tangle-network/sandbox": "^0.12.0"
},
Expand Down
11 changes: 6 additions & 5 deletions bench/scripts/trata-hedge/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ sparse (1 iff all themes). No deployable ground-truth checker — it's an **orac
- **NOT** the verifier-grounded selector gate (our HumanEval/commit0 headline). The only
checker is the judge itself, so selecting by it = selecting by the eval metric (an
oracle, a Goodhart trap). See `docs/results.md`.
- **IS** admissible: (1) more-compute headroom (pass@k), (2) the **improvement loop**
(`selfImprove`/GEPA optimizing the analyst directive *against this judge*, held-out
gated — the legitimate use of a judge domain), with the honest caveat that an
- **IS** admissible: (1) more-compute headroom (pass@k), (2) prompt optimization
(`improve` with agent-eval's official GEPA method, using disjoint train, selection,
and final-test partitions), with the honest caveat that an
LLM-judge can be *gamed*, so a held-out lift means "higher judge score," which without
ground truth we can't independently certify as "better analysis."

Expand Down Expand Up @@ -52,5 +52,6 @@ dotenvx run -f ~/company/devops/secrets/.env.keys -f ~/company/devops/secrets/ag
## Next steps

1. Agentic solver: our sandbox runtime browses the corpus + cites (fair baseline).
2. The improvement loop: `selfImprove` on the analyst directive vs this judge, held-out
gated, across the 102 tasks — with the judge-gaming caveat stated.
2. Prompt optimization: run `bench/src/trata-gepa.mts` across all 102 tasks with
explicit train, selection, and final-test partitions, and state the judge-gaming
caveat with every result.
2 changes: 1 addition & 1 deletion bench/src/gate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,7 @@ export async function runGate(opts: RunGateOptions): Promise<GateReport> {
root: a.label,
nodes: [],
total: acc.get(a.label)!.spend,
statusCounts: { done: 0, failed: 0, cancelled: 0, pending: 0 },
statusCounts: { done: 0, failed: 0, cancelled: 0, pending: 0, waiting: 0 },
},
}))
const equalK = equalKOnCost(equalKArms)
Expand Down
7 changes: 5 additions & 2 deletions bench/src/hev-eval.mts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ async function complete(base: string, key: string, model: string, prompt: string
async function main(): Promise<void> {
const key = process.env.TANGLE_API_KEY
if (!key) throw new Error('TANGLE_API_KEY required')
const apiKey: string = key
const base = process.env.ROUTER_BASE ?? 'https://api.together.xyz/v1'
const model = process.env.WORKER_MODEL ?? 'meta-llama/Meta-Llama-3-8B-Instruct-Lite'
const instruction = process.env.INSTRUCTION_FILE
Expand All @@ -51,8 +52,10 @@ async function main(): Promise<void> {
let i = 0
async function worker(): Promise<void> {
while (i < tasks.length) {
const t = tasks[i++]
const reply = await complete(base, key, model, `${instruction}\n\n\`\`\`python\n${t.prompt}\`\`\``, maxTokens)
const t = tasks[i]
i += 1
if (!t) continue
const reply = await complete(base, apiKey, model, `${instruction}\n\n\`\`\`python\n${t.prompt}\`\`\``, maxTokens)
const { pass: p } = await runChecker(t, extractCode(reply))
if (p === 1) pass += 1
else fails.push(t.taskId)
Expand Down
Loading
Loading