@tangle-network/agent-eval 0.110.0 → 0.110.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/dist/benchmarks/index.js +2 -2
- package/dist/campaign/index.d.ts +49 -4
- package/dist/campaign/index.js +4 -2
- package/dist/{chunk-RNB2NICW.js → chunk-GBI5J5DB.js} +72 -2
- package/dist/chunk-GBI5J5DB.js.map +1 -0
- package/dist/{chunk-GTERJI6Q.js → chunk-J4AKLZEV.js} +12 -1
- package/dist/{chunk-GTERJI6Q.js.map → chunk-J4AKLZEV.js.map} +1 -1
- package/dist/contract/index.d.ts +10 -9
- package/dist/contract/index.js +1 -1
- package/dist/contract/index.js.map +1 -1
- package/dist/{gepa-BUNP3606.d.ts → gepa-T8T215nw.d.ts} +6 -4
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/openapi.json +1 -1
- package/dist/{provenance-DMvsfknv.d.ts → provenance-CyxkvEi9.d.ts} +1 -1
- package/docs/improvement-glossary.md +14 -13
- package/package.json +1 -1
- package/dist/chunk-RNB2NICW.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -32,8 +32,8 @@ import { a as TraceAnalystSpan } from './store-C1YxJDEK.js';
|
|
|
32
32
|
export { D as DEFAULT_TRACE_ANALYST_BUDGETS, b as DatasetOverview, E as ErrorCluster, Q as QueryTracesPage, S as SearchSpanResult, c as SearchTraceResult, d as SpanMatchRecord, e as TRACE_ANALYST_TRUNCATION_MARKER_PREFIX, T as TraceAnalysisStore, f as TraceAnalystByteBudgets, g as TraceAnalystFilters, h as TraceAnalystSpanKind, i as TraceAnalystSpanStatus, j as TraceAnalystTraceSummary, V as ViewSpansResult, k as ViewTraceOversized, l as ViewTraceResult } from './store-C1YxJDEK.js';
|
|
33
33
|
import { b as JudgeConfig, J as JudgeScore, S as Scenario$1, g as Gate } from './types-v--ctu-b.js';
|
|
34
34
|
import { A as AnalyzeRunsOptions } from './analyze-runs-Dmz6LA9e.js';
|
|
35
|
-
import { q as Objective, t as ParetoResult, h as GepaProposerConstraints, a as RunImprovementLoopResult } from './gepa-
|
|
36
|
-
export { u as DEFAULT_RED_TEAM_CORPUS, D as Direction, e as RedTeamCase, v as RedTeamCategory, w as RedTeamFinding, x as RedTeamPayload, y as RedTeamReport, z as crowdingDistance, A as dominates, B as paretoFrontier, E as paretoFrontierWithCrowding, F as redTeamDataset, H as redTeamReport, I as scalarScore, J as scoreRedTeamOutput, K as toolNamesForRun } from './gepa-
|
|
35
|
+
import { q as Objective, t as ParetoResult, h as GepaProposerConstraints, a as RunImprovementLoopResult } from './gepa-T8T215nw.js';
|
|
36
|
+
export { u as DEFAULT_RED_TEAM_CORPUS, D as Direction, e as RedTeamCase, v as RedTeamCategory, w as RedTeamFinding, x as RedTeamPayload, y as RedTeamReport, z as crowdingDistance, A as dominates, B as paretoFrontier, E as paretoFrontierWithCrowding, F as redTeamDataset, H as redTeamReport, I as scalarScore, J as scoreRedTeamOutput, K as toolNamesForRun } from './gepa-T8T215nw.js';
|
|
37
37
|
import { S as SandboxDriver, H as HarnessConfig, a as SandboxHarnessResult } from './test-graded-scenario-mzYBKspu.js';
|
|
38
38
|
export { D as DockerSandboxDriver, c as SandboxHarness, d as SandboxResult, e as SubprocessSandboxDriver, f as SubprocessSandboxDriverOptions, g as TestGradedRunOptions, b as TestGradedRunResult, T as TestGradedScenario, h as TestOutputParser, i as composeParsers, j as jestTestParser, p as pytestTestParser, r as runTestGradedScenario, v as vitestTestParser } from './test-graded-scenario-mzYBKspu.js';
|
|
39
39
|
export { b as RunIntegrityError, R as RunIntegrityExpectations, c as RunIntegrityIssue, d as RunIntegrityIssueCode, a as RunIntegrityReport, e as assertRunCaptured, t as throwIfRunIncomplete } from './integrity-qemeBAyx.js';
|
package/dist/index.js
CHANGED
|
@@ -59,7 +59,7 @@ import {
|
|
|
59
59
|
llmJudge,
|
|
60
60
|
parseCorrectnessResponse,
|
|
61
61
|
verifyCompletion
|
|
62
|
-
} from "./chunk-
|
|
62
|
+
} from "./chunk-GBI5J5DB.js";
|
|
63
63
|
import {
|
|
64
64
|
DEFAULT_MUTATION_PRIMITIVES,
|
|
65
65
|
DEFAULT_RED_TEAM_CORPUS,
|
|
@@ -83,7 +83,7 @@ import {
|
|
|
83
83
|
scoreRedTeamOutput,
|
|
84
84
|
surfaceContentHash,
|
|
85
85
|
toolNamesForRun
|
|
86
|
-
} from "./chunk-
|
|
86
|
+
} from "./chunk-J4AKLZEV.js";
|
|
87
87
|
import {
|
|
88
88
|
MODEL_PRICING,
|
|
89
89
|
MetricsCollector,
|
package/dist/openapi.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"openapi": "3.1.0",
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "@tangle-network/agent-eval — wire protocol",
|
|
5
|
-
"version": "0.110.
|
|
5
|
+
"version": "0.110.1",
|
|
6
6
|
"description": "HTTP and stdio RPC interface to agent-eval. The TypeScript runtime is the source of truth; this spec is the contract that cross-language clients (Python, Rust, Go) generate from.\n\nWire-protocol version: 1.0.0. Bumps on breaking changes to request/response schemas.",
|
|
7
7
|
"contact": {
|
|
8
8
|
"name": "Tangle Network",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { S as Scenario, g as Gate, G as GateResult, n as GateContext, C as CampaignResult, p as Mutator, f as SurfaceProposer, M as MutableSurface, h as GateDecision } from './types-v--ctu-b.js';
|
|
2
|
-
import { e as RedTeamCase, D as Direction, b as RunCampaignOptions } from './gepa-
|
|
2
|
+
import { e as RedTeamCase, D as Direction, b as RunCampaignOptions } from './gepa-T8T215nw.js';
|
|
3
3
|
import { R as RunRecord } from './run-record-DksGsfgv.js';
|
|
4
4
|
import { a as PairedBootstrapResult } from './statistics-D88peojY.js';
|
|
5
5
|
import { HostedClient, TraceSpanEvent } from './hosted/index.js';
|
|
@@ -61,25 +61,26 @@ Start at the top row and only move down when the row's *"reach for it when"* mat
|
|
|
61
61
|
| `gepaProposer` | You want the strong default: reflective full-surface prompt rewrites, grounded in findings, keeping a Pareto frontier of complementary winners. | prompt string | **Yes — `improve({ surface: 'prompt' })` default.** Proven live. |
|
|
62
62
|
| `skillOptProposer` | You are editing a structured `SKILL.md`/runbook and want small anchored add/delete/replace patches that preserve earlier rules. | skill/prompt string | **Yes — `improve({ surface: 'skills' })` default.** Not yet proven live. |
|
|
63
63
|
| `parameterSweepProposer` | The likely fix is a config knob, not words — `retrieval.k`, `temperature`, `max_tokens`. You give it candidate patches; it applies them to a JSON surface. | JSON config string | Yes, but you supply the candidate list. |
|
|
64
|
-
| `fapoProposer` | You want *evidence to decide when to escalate*: try prompt edits first, move to parameters, then to structural code — one scoped change per cycle, only escalating when the cheaper level is exhausted.
|
|
64
|
+
| `fapoProposer` | You want *evidence to decide when to escalate*: try prompt edits first, move to parameters, then to structural code — one scoped change per cycle, only escalating when the cheaper level is exhausted. | whatever its level proposers return | Exported; you wire the level proposers. |
|
|
65
|
+
| `compositeProposer` | You want several proposers to share one candidate-generation budget in the same round. It allocates the population by declared weights, preserves member provenance, deduplicates surfaces, and isolates a member failure unless every member fails. | whatever its member proposers return | Exported; you wire the member proposers. |
|
|
65
66
|
| `aceProposer` | You are accumulating hard-won lessons into a playbook and must **never** summarize an old lesson away (append-only, provenance-tagged). | playbook string | Exported. |
|
|
66
67
|
| `memoryCurationProposer` | Same as ACE but you want a compact, deduped, re-ranked memory instead of append-only growth. | memory string | Exported. |
|
|
67
68
|
| `evolutionaryProposer` | You want blind population search (mutate → measure → select) with no reflection over findings — a cheap control or a baseline to beat. | any string | Exported. |
|
|
68
69
|
| `traceAnalystProposer` | Bench-only: race our trace-analysis evidence engine head-to-head inside `compareProposers`. | prompt string | Bench-only. |
|
|
69
70
|
| `haloProposer` | Bench-only: race the external `halo-engine` analysis against ours. | prompt string | Bench-only, external. |
|
|
70
71
|
|
|
71
|
-
Default path: `gepaProposer` for prompts; add `parameterSweepProposer` when a config knob is the suspect; wrap
|
|
72
|
+
Default path: `gepaProposer` for prompts; add `parameterSweepProposer` when a config knob is the suspect; wrap levels in `fapoProposer` when the loop should decide *when* to escalate, or use `compositeProposer` when multiple proposer families must split one fixed population budget.
|
|
72
73
|
|
|
73
|
-
## Composing proposers —
|
|
74
|
+
## Composing proposers — four distinct shapes
|
|
74
75
|
|
|
75
|
-
|
|
76
|
-
Composition happens in exactly three shapes:
|
|
76
|
+
Choose the shape that matches the experiment:
|
|
77
77
|
|
|
78
|
-
1. **
|
|
79
|
-
2. **
|
|
80
|
-
3. **
|
|
78
|
+
1. **Portfolio** — `compositeProposer` splits one generation's population across member proposers by fixed weights and returns one provenance-labelled pool.
|
|
79
|
+
2. **Escalate** — `fapoProposer` wraps prompt + parameter + structural levels into one proposer and spends on the cheapest level until evidence says to escalate.
|
|
80
|
+
3. **Race** — `compareProposers` gives proposers separate loops, then re-scores their winners on one holdout and returns per-proposer lift intervals plus pairwise results.
|
|
81
|
+
4. **Plug in** — hand any proposer to `runImprovementLoop({ proposer })`, or use `improve({ surface, generator })` in `@tangle-network/agent-runtime`.
|
|
81
82
|
|
|
82
|
-
###
|
|
83
|
+
### 2 + 4 — compose by escalation, then run the improvement loop
|
|
83
84
|
|
|
84
85
|
```ts
|
|
85
86
|
import {
|
|
@@ -93,8 +94,8 @@ import {
|
|
|
93
94
|
const llm = { baseUrl: process.env.TANGLE_BASE_URL, apiKey: process.env.TANGLE_API_KEY }
|
|
94
95
|
const model = 'deepseek-v4-flash'
|
|
95
96
|
|
|
96
|
-
// Compose: prompt edits first (GEPA),
|
|
97
|
-
// prompt-level search plateaus.
|
|
97
|
+
// Compose by escalation: prompt edits first (GEPA), then a config knob only
|
|
98
|
+
// when prompt-level search plateaus. This is distinct from a peer portfolio.
|
|
98
99
|
const proposer = fapoProposer({
|
|
99
100
|
scope: { allowedLevels: ['prompt', 'parameter'] }, // no structural/code tier here
|
|
100
101
|
promptProposer: gepaProposer({ llm, model, target: 'agent system prompt' }),
|
|
@@ -147,7 +148,7 @@ const out = await improve(profile, findings, {
|
|
|
147
148
|
if (out.shipped) deploy(out.profile) // out.lift is the held-out winner − baseline
|
|
148
149
|
```
|
|
149
150
|
|
|
150
|
-
###
|
|
151
|
+
### 3 — race proposers head-to-head for a lift CI
|
|
151
152
|
|
|
152
153
|
```ts
|
|
153
154
|
import {
|
|
@@ -196,7 +197,7 @@ Every entrant is re-scored on the **same** holdout with the **same** judges, so
|
|
|
196
197
|
- Do not put eval logic inside a proposer — scoring lives in `dispatch` + `judges`, proposing lives in the proposer.
|
|
197
198
|
- Do not let a proposer read held-out judge scores — `ProposeContext` makes that a compile error on purpose; a proposer that games the acceptance axis is an oracle, not an optimizer.
|
|
198
199
|
- Do not read `lift` without `result.power`/MDE — a "+4" on a valset too small to detect +4 is noise wearing a number.
|
|
199
|
-
- Do not
|
|
200
|
+
- Do not confuse `compositeProposer` with `fapoProposer`: the former allocates one fixed population across peers, while the latter escalates through ordered levels from cheaper to more structural changes.
|
|
200
201
|
|
|
201
202
|
### neutralizationGate — the placebo / content-causality control
|
|
202
203
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tangle-network/agent-eval",
|
|
3
|
-
"version": "0.110.
|
|
3
|
+
"version": "0.110.1",
|
|
4
4
|
"description": "Evaluate and improve AI agents from runs, traces, judges, and feedback. Compare candidates, cluster failures, measure lift, and gate releases.",
|
|
5
5
|
"homepage": "https://github.com/tangle-network/agent-eval#readme",
|
|
6
6
|
"repository": {
|