orizu 0.5.21 → 0.5.22
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/README.md +9 -6
- package/dist/gepa-engine-dispatch.d.ts.map +1 -1
- package/dist/gepa-engine-dispatch.js +20 -1
- package/dist/gepa-python-paths.d.ts.map +1 -1
- package/dist/gepa-python-paths.js +25 -6
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +36 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -39
- package/dist/instruction-set-loader.d.ts.map +1 -1
- package/dist/instruction-set-loader.js +57 -5
- package/dist/instruction-sets-cli.d.ts +5 -2
- package/dist/instruction-sets-cli.d.ts.map +1 -1
- package/dist/instruction-sets-cli.js +134 -24
- package/dist/skilled-proposer-config.d.ts +2 -0
- package/dist/skilled-proposer-config.d.ts.map +1 -0
- package/dist/skilled-proposer-config.js +212 -0
- package/dist/skilled-proposer-launch.d.ts +4 -0
- package/dist/skilled-proposer-launch.d.ts.map +1 -1
- package/dist/skilled-proposer-launch.js +65 -1
- package/package.json +1 -1
- package/src/gepa-engine-dispatch.ts +21 -1
- package/src/gepa-python-paths.ts +24 -6
- package/src/help.ts +36 -14
- package/src/index.ts +6 -53
- package/src/instruction-set-loader.ts +55 -5
- package/src/instruction-sets-cli.ts +173 -19
- package/src/skilled-proposer-config.ts +191 -0
- package/src/skilled-proposer-launch.ts +59 -1
- package/vendor/orizu-gepa/src/orizu_gepa_connector/engine.py +36 -3
- package/vendor/orizu-gepa/src/orizu_gepa_connector/instruction_set_loader.py +31 -3
- package/vendor/orizu-gepa/src/orizu_gepa_connector/skilled_proposer_bridge.py +354 -5
- package/vendor/skills/orizu-cli/SKILL.md +50 -16
- package/vendor/skills/orizu-cli/references/building-judges.md +2 -2
- package/vendor/skills/orizu-cli/references/cli-reference.md +57 -28
- package/vendor/skills/orizu-cli/references/instructions-after-prompts.md +120 -0
- package/vendor/skills/orizu-cli/references/migrate-existing-gepa-setup.md +109 -49
- package/vendor/skills/orizu-cli/references/optimization-reports.md +16 -11
- package/vendor/skills/orizu-cli/references/optimization-with-gepa.md +29 -28
- package/vendor/skills/orizu-cli/references/primer.md +21 -5
- package/vendor/skills/orizu-cli/references/prompt-control-plane.md +132 -85
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
# Optimization With GEPA
|
|
2
2
|
|
|
3
|
-
How to optimize
|
|
3
|
+
How to optimize an instruction-set profile against validated judges and scorers. For Orizu-tracked runs, a coding agent prepares the complete instruction-set manifest, a human curator creates or updates the set from the local CLI, and then the agent runs the bundled `orizu optimizations run-gepa` flow. Use this reference for GEPA mechanics, custom optimizer implementations, and optional DSPy context for customers already using DSPy.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Select the profile explicitly with `--instruction-set <slug-or-exact-name> --model-config <identity>`. Those two selectors replace the legacy `--candidate-version-id` path and cannot be combined with it. The connector resolves that model config's production profile, or the set default when the profile has no production version, and optimizes its complete component map. `--component-selector round-robin` is the default and updates one component per round; `--component-selector all` updates every component per round. The runner receives a multi-component candidate as a component map, while a one-component set keeps the existing single-body runner contract. Git-pinned components and malformed component maps are refused before a run starts. Automatic promotion is refused for multi-component sets. Human/local CLI only: after validation, a coding agent writes the complete component map back to the manifest and prepares exact handoff commands; a human curator runs `orizu instructions push` and `orizu instructions profiles promote`.
|
|
6
6
|
|
|
7
7
|
## Inputs
|
|
8
8
|
|
|
9
9
|
You should arrive here with:
|
|
10
10
|
- One or more **validated judges** (TPR > 90%, TNR > 90% on a held-out test set).
|
|
11
11
|
- A **dataset** of inputs to optimize against — usually the same exported labels, plus any harder cases you've added since.
|
|
12
|
-
-
|
|
12
|
+
- An **instruction set** whose selected profile contains the starting component values for the LLM application you want to improve.
|
|
13
13
|
|
|
14
14
|
If you don't have a validated judge, stop. Optimizing against an unvalidated judge means you'll hill-climb on a noisy or biased signal — Goodhart's law in action.
|
|
15
15
|
|
|
16
16
|
## Why GEPA-Style Optimization
|
|
17
17
|
|
|
18
|
-
- **GEPA** is a gradient-free
|
|
18
|
+
- **GEPA** is a gradient-free text optimizer that uses an LLM to propose component edits, scores candidates against your metric, and keeps the best. It is well-suited to instruction optimization where you cannot backpropagate through the model.
|
|
19
19
|
- In Orizu, runners execute candidates, scorers produce metrics/feedback, and optimization events make the loop inspectable and promotable.
|
|
20
20
|
- DSPy is not part of Orizu's bundled optimizer. Treat DSPy examples here as an external integration pattern only.
|
|
21
21
|
|
|
@@ -40,29 +40,30 @@ If you don't have a validated judge, stop. Optimizing against an unvalidated jud
|
|
|
40
40
|
└──────────┬──────────────┘
|
|
41
41
|
▼
|
|
42
42
|
┌─────────────────────────┐
|
|
43
|
-
│ Optimized
|
|
43
|
+
│ Optimized profile │
|
|
44
44
|
│ Compare before/after │
|
|
45
45
|
└─────────────────────────┘
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
## Orizu-tracked optimization
|
|
49
49
|
|
|
50
|
-
Use the
|
|
50
|
+
Use the control plane described in `prompt-control-plane.md` when you want runs, candidates, score charts, Pareto/frontier views, and promotions in Orizu:
|
|
51
51
|
|
|
52
|
-
1.
|
|
53
|
-
2.
|
|
54
|
-
3.
|
|
55
|
-
4.
|
|
56
|
-
5. Use set
|
|
57
|
-
6.
|
|
58
|
-
7.
|
|
52
|
+
1. Human/local CLI only: a human curator creates the instruction set from its prepared manifest with `orizu instructions create`, or pushes a new profile version with `orizu instructions push`. The coding agent prepares the manifest and handoff; keep the set's shape fixed during a run.
|
|
53
|
+
2. Push the candidate runner and, for an LLM evaluator, the judge rubric with `orizu judges push`.
|
|
54
|
+
3. Register a row scorer for reflection. GEPA reflection requires row-level feedback.
|
|
55
|
+
4. Snapshot a dataset version and create a train/validation split set.
|
|
56
|
+
5. Use `orizu optimizations run-gepa` with the set slug and model-config identity. It uses official GEPA by default; `--engine legacy` is a frozen safety hatch while migration parity is proven. Use `orizu optimizations start` plus event logging for a custom optimizer.
|
|
57
|
+
6. Use set scorers for selection/tracked reporting when the meaningful metric is batch-level; execute builtin set scorers with `orizu scorers exec` or submit precomputed aggregates with `orizu scores submit --aggregate`.
|
|
58
|
+
7. Promote only candidates that passed validation, as complete profile versions rather than individual components.
|
|
59
|
+
8. Write and attach an optimization report from the local logs or export artifact; see `optimization-reports.md`.
|
|
59
60
|
|
|
60
|
-
The bundled Orizu GEPA-style optimizer supports configurable budget, minibatch size (default 3), candidate selection strategy, reflection model/template, reflection provider settings, evaluation caching, and optional auto-promotion. It redacts row snapshots and reflection text by default; only pass `--log-row-snapshots` when raw data in event logs is intentional.
|
|
61
|
+
The bundled Orizu GEPA-style optimizer supports configurable budget, minibatch size (default 3), candidate selection strategy, reflection model/template, reflection provider settings, evaluation caching, and optional auto-promotion, which is human-only; coding agents must not enable it. It redacts row snapshots and reflection text by default; only pass `--log-row-snapshots` when raw data in event logs is intentional.
|
|
61
62
|
|
|
62
63
|
Reflection output contract:
|
|
63
|
-
- The reflective LM's final text is used verbatim as the next candidate
|
|
64
|
-
- The default reflection
|
|
65
|
-
- Put provider-native reasoning controls in `--reflection-provider-settings <json|@file>`, not in
|
|
64
|
+
- The reflective LM's final text is used verbatim as the next value of the selected component. With `round-robin`, other component values are read-only context; with `all`, each component is reflected independently and the results form one complete candidate profile.
|
|
65
|
+
- The default reflection template asks for only the complete updated component value. Do not ask the model to wrap the value in markdown fences or tags; instruction components often contain those characters.
|
|
66
|
+
- Put provider-native reasoning controls in `--reflection-provider-settings <json|@file>`, not in an instruction component. For OpenAI reasoning models, use a shape such as `{"reasoning":{"effort":"medium","summary":"auto"}}`. For Anthropic Claude models with thinking controls, use a shape such as `{"thinking":{"type":"adaptive","display":"omitted"},"output_config":{"effort":"medium"}}`.
|
|
66
67
|
- Reflection max-token limits are explicit. `--reflection-max-tokens <n>` maps to Anthropic `max_tokens` and OpenAI `max_output_tokens`; Anthropic native Messages reflection requires it, while OpenAI may omit it when no cap is desired.
|
|
67
68
|
- Reflection HTTP calls retry transient failures by default (`--reflection-retry-attempts 3`, `--reflection-http-timeout-seconds 180`). Exhausted retryable failures emit `reflection_failed`, consume one candidate-proposal budget slot, and move to the next iteration instead of killing the run.
|
|
68
69
|
|
|
@@ -74,18 +75,18 @@ Since release `cli-v0.5.20` (`orizu@0.5.20` on npm), `run-gepa` defaults to the
|
|
|
74
75
|
|
|
75
76
|
- **Validation happens before launch.** Legacy validated flags inside the python process (an argparse exit); the official dispatcher enforces the flag-shape rules below before anything spawns and names the offending flag in the error (the budget-conflict error lists the exclusive set rather than the flags you passed; value errors — e.g. a non-integer or non-positive budget number — are still reported by the engine and name the underlying setting). The rules carried over from legacy: `--budget` / `--candidate-selection-strategy` / `--scorer-input-contract` validate their choices, boolean flags take no value, abbreviated flag spellings are rejected, and budget controls are mutually exclusive — at most one of `--budget`, `--max-metric-calls`, `--max-full-evals`, `--max-iterations`. The official-only `--max-candidate-proposals` joins that exclusion set; passing no budget control defaults to `--budget auto`.
|
|
76
77
|
- **A reflection cap is required for non-OpenAI reflection models.** `--reflection-max-tokens` is required at launch whenever the reflection model does not start with `openai/` — including the default (`anthropic/claude-opus-4-7`) and bare names like `gpt-4o` — so the run refuses immediately instead of failing every reflection call mid-run.
|
|
77
|
-
- **The skilled proposer is an opt-in proposal path.** Reach for `--candidate-proposer skilled-proposer` when you want to evaluate the upstream proposer's alternative reflection process and can accept its first-use network, CPython, and managed-dependency requirements. Evaluate the shipped empty-skills proposer through the controlled A/B below, and ground quality or generalization claims in that evidence.
|
|
78
|
+
- **The skilled proposer is an opt-in proposal path.** Reach for `--candidate-proposer skilled-proposer` when you want to evaluate the upstream proposer's alternative reflection process and can accept its first-use network, CPython, and managed-dependency requirements. Add `--candidate-proposer-config @file` for explicit skills/guidance; do not combine the selection with `--reflection-prompt-template`. Evaluate the shipped empty-skills proposer or a pinned config through the controlled A/B below, and ground quality or generalization claims in that evidence. Config schema, environment setup, and recovery live in `prompt-control-plane.md` ("Skilled proposer").
|
|
78
79
|
- **Seed preflight: same gate, better evidence.** Both engines refuse a degenerate seed (every valid row pinned to the same bound — the worst score, or uniformly `0.0` under a lower-is-better scorer, where the perfect bound is indistinguishable from a scorer silently zeroing on a mismatched input shape) or an all-errored seed at launch, and both accept `--allow-degenerate-seed` to bypass. The bypass covers *both* refusals — including the broken-scorer one — so a bypassed run can spend budget on a scorer that never works; use it only when a weak seed is expected. New on the official engine: the refusal message carries per-row evidence (row ids, scores, scorer output and errors); `<log-dir>/preflight-refused-<uuid>/preflight.json` (not written under `--no-local-log`) instead stores redacted `{row_id, score, error_class}` entries unless `--log-row-snapshots` is passed — a sibling of the run directories, since no run record exists when a launch is refused.
|
|
79
80
|
- **Metric accounting differs.** Official counts include every evaluated row; legacy excluded some cached work. Do not compare raw metric-call totals across engines (details in ADR-019).
|
|
80
81
|
- **Artifacts.** Both engines write `events.jsonl`, `evaluations.jsonl`, `reflections.jsonl`, and `result.json` locally; `lm_stats.json` (reflection usage) is official-only. Dashboard rendering is identical, and run metadata records `engine: official` or `engine: legacy`.
|
|
81
82
|
|
|
82
|
-
Terminal semantics are unchanged between engines: exhausting any budget control other than `--max-iterations` ends the run `paused` (`pause_reason: budget_exhausted`) with no auto-promotion, while completing the configured `--max-iterations` is a normal `succeeded` finish that may auto-promote. A paused run's validated candidates can still be promoted manually — only automatic promotion is gated on how the run ended. Falling back to `--engine legacy` after a budget-exhausted pause reproduces the same paused outcome; it will not turn the run into a `succeeded` one.
|
|
83
|
+
Terminal semantics are unchanged between engines: exhausting any budget control other than `--max-iterations` ends the run `paused` (`pause_reason: budget_exhausted`) with no auto-promotion, while completing the configured `--max-iterations` is a normal `succeeded` finish that may auto-promote only when the human-only option was deliberately enabled; coding agents must not enable it. A paused run's validated candidates can still be promoted manually by a human curator — only automatic promotion is gated on how the run ended. Falling back to `--engine legacy` after a budget-exhausted pause reproduces the same paused outcome; it will not turn the run into a `succeeded` one.
|
|
83
84
|
|
|
84
85
|
**Fallback:** rerun with `--engine legacy` for the previous engine's exact behavior, dropping `--max-candidate-proposals` first if you used it (it is official-only; the CLI refuses it under legacy before launch). Legacy is frozen (no new features) and will be removed at the M3 milestone (ADR-019) — if you fall back because the official engine misbehaved, capture both run ids and report the pair.
|
|
85
86
|
|
|
86
87
|
### Compare the skilled proposer with the default
|
|
87
88
|
|
|
88
|
-
Run two arms with the same
|
|
89
|
+
Run two arms with the same instruction-set profile version, dataset version and split set, candidate and scorer runners, seed, reflection model/settings, thread count, and one shared overall budget such as `--max-candidate-proposals 1`. Keep the default arm unselected; add `--candidate-proposer skilled-proposer`, the same pinned `--candidate-proposer-config @file` when testing configuration, and bounded `--proposal-max-calls` / `--proposal-max-tokens` only to the selected arm. The comparison is ready when both terminal states, retained candidates, scores, proposal evidence, and total run usage are captured. A fixed GEPA seed aligns optimizer sampling but does not make provider or scorer calls deterministic, so treat the pair as process and outcome evidence rather than an intrinsic quality claim.
|
|
89
90
|
|
|
90
91
|
For the selected arm, each provider-bearing proposal call appends `proposal-observability/events.jsonl`. Success records contain `source`, `status`, `attempt`, `correlation_id`, `provider`, `model`, nullable `request_id`, `latency_ms`, `cache_state`, and `usage.{input_tokens,output_tokens,total_tokens}`. Failure records contain `source`, `status`, `attempt`, `correlation_id`, `provider`, `cache_state`, `failure_code`, and optional `usage`; the latest durable failure is also written to `proposal-failures/latest.json` with `source`, `code`, `detail`, and optional `correlation_id`.
|
|
91
92
|
|
|
@@ -93,7 +94,7 @@ With local logging, those paths sit under `<log-dir>/<run-id>/`, and terminal `p
|
|
|
93
94
|
|
|
94
95
|
## Step 1: Wrap your application as an Orizu runner
|
|
95
96
|
|
|
96
|
-
For Orizu-tracked optimization, the candidate runner receives one dataset row and
|
|
97
|
+
For Orizu-tracked optimization, the candidate runner receives one dataset row and the candidate profile through the file contract. A one-component profile is passed as a single body for runner compatibility; a multi-component profile is passed as a complete component map. The scorer runner, by default, receives a GEPA-shaped `row` — `{source_row, candidate_id, candidate_output, candidate_raw_response, candidate_error}` — and returns a score and feedback. See `prompt-control-plane.md` ("Scorer-Runner Input Contracts") for the exact runner I/O shapes.
|
|
97
98
|
|
|
98
99
|
**Contract warning:** the GEPA scorer contract differs from the flat-row score-run contract used by `orizu runners exec --scorer-version`. A judge runner written for flat-row score runs will find no output to judge in the GEPA shape and silently score every candidate 0. Do not hand-write a wrapper runner: pass `--scorer-input-contract flat_row` (plus `--scorer-candidate-field <row-field>` if the judge reads the candidate output from a named row field such as `draft`) and `run-gepa` adapts the payload for you while keeping the registered runner bytes unchanged. `run-gepa` also validates the contract on the seed at launch and refuses a uniformly-worst-scoring seed with a diagnosis instead of burning budget.
|
|
99
100
|
|
|
@@ -132,7 +133,7 @@ class SupportAgent(dspy.Module):
|
|
|
132
133
|
)
|
|
133
134
|
```
|
|
134
135
|
|
|
135
|
-
If your real application is multi-step (retrieval + generation + tool use), build a multi-Module program. GEPA can optimize each
|
|
136
|
+
If your real application is multi-step (retrieval + generation + tool use), build a multi-Module program. GEPA can optimize each module's instructions independently.
|
|
136
137
|
|
|
137
138
|
## Step 2: Register scorers
|
|
138
139
|
|
|
@@ -208,7 +209,7 @@ logs/<optimization_run_id>/
|
|
|
208
209
|
result.json
|
|
209
210
|
```
|
|
210
211
|
|
|
211
|
-
Use this directory as the
|
|
212
|
+
Use this directory as the preferred artifact for coding-agent analysis. It contains the full row inputs, model outputs, scores, feedback, scorer responses, reflection prompts, reflection responses, candidate text, and final result. Override the root with `--log-dir <dir>`; disable persistence with `--no-local-log` only when raw rows/reflection context must not be written to disk.
|
|
212
213
|
|
|
213
214
|
If the local log is missing or the run happened elsewhere, export the server-side archive:
|
|
214
215
|
|
|
@@ -247,8 +248,8 @@ optimized_program.save("./optimized_support_agent.json")
|
|
|
247
248
|
|
|
248
249
|
GEPA will:
|
|
249
250
|
1. Run the program on `trainset`, score with `metric`.
|
|
250
|
-
2. Use `reflection_lm` to propose
|
|
251
|
-
3. Score candidate
|
|
251
|
+
2. Use `reflection_lm` to propose instruction edits based on failures.
|
|
252
|
+
3. Score candidate programs on the trainset, keep the best.
|
|
252
253
|
4. Validate on `valset` to avoid overfitting.
|
|
253
254
|
|
|
254
255
|
Orizu's bundled optimizer is intentionally narrower than DSPy GEPA today: text candidates only, local runner/scorer directories, and Orizu event logging built in.
|
|
@@ -287,8 +288,8 @@ print(f"After: {after}")
|
|
|
287
288
|
|
|
288
289
|
## Step 6: Ship and feed the loop
|
|
289
290
|
|
|
290
|
-
If the optimized
|
|
291
|
-
-
|
|
291
|
+
If the optimized profile holds up on held-out:
|
|
292
|
+
- Promote the validated profile version to production; never promote one component by itself.
|
|
292
293
|
- Sample new production traces over the next week.
|
|
293
294
|
- Upload them as a new dataset (`primer.md` Step 1).
|
|
294
295
|
- Annotate failures the optimized system *now* exhibits — they'll be different from the ones the previous version had.
|
|
@@ -304,7 +305,7 @@ Each pass through the loop reveals the next layer.
|
|
|
304
305
|
- **Hiding regressions in the average.** Track per-failure-mode metrics, not just combined.
|
|
305
306
|
- **Over-budgeting GEPA.** Heavy budgets give diminishing returns and burn LM spend. Start with `auto="light"`, scale up only if needed.
|
|
306
307
|
- **Ignoring temperature.** Run optimization with the same LM config (model, temperature) you use in production. Optimizing against gpt-4o at temp=0 doesn't transfer to gpt-4o-mini at temp=0.7.
|
|
307
|
-
- **Recreating Orizu logging by hand for
|
|
308
|
+
- **Recreating Orizu logging by hand for instruction sets.** Use `orizu optimizations run-gepa` unless the optimizer is genuinely custom.
|
|
308
309
|
|
|
309
310
|
## Checklist
|
|
310
311
|
|
|
@@ -10,7 +10,23 @@ Upload → Annotate → Judge → Optimize
|
|
|
10
10
|
└────────── new traces ──────────┘
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
The CLI covers the full operational loop. Human annotation still happens through apps/tasks, while judge/scorer logic and optimization execution run locally and report back through the
|
|
13
|
+
The CLI covers the full operational loop. Start instruction artifacts with `orizu instructions`: one instruction set per agent or LLM experience, one profile per model config, and components owned by that profile. Human annotation still happens through apps/tasks, while judge/scorer logic and optimization execution run locally and report back through the instruction control plane. Each step depends on the output of the previous; don't skip ahead.
|
|
14
|
+
|
|
15
|
+
An instruction-set manifest carries its `name`, optional `description`, fixed, ordered `shape`, and component values. The set's slug is its stable CLI reference even when its display name changes. Profiles have their own component values; components are never shared between profiles or sets. The set-wide default serves model configs without a production profile version.
|
|
16
|
+
|
|
17
|
+
Start by inspecting or creating the set, then push and sync through the same surface:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
orizu instructions list --project <team>/<project>
|
|
21
|
+
orizu instructions show <slug-or-exact-name> --project <team>/<project>
|
|
22
|
+
# Human/local CLI only: a human runs create/push; hosted agents may run profiles new and sync.
|
|
23
|
+
orizu instructions create ./orizu.instruction-set.json --project <team>/<project> --model-config <identity>
|
|
24
|
+
orizu instructions push ./orizu.instruction-set.json --project <team>/<project> --set <slug-or-exact-name>
|
|
25
|
+
orizu instructions profiles new <slug-or-exact-name> --project <team>/<project> --model-config <identity>
|
|
26
|
+
orizu instructions sync <slug-or-exact-name> --out ./instructions --project <team>/<project>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Do not create or mutate standalone prompts. If a legacy identifier leads to a prompt read view, use its owner information to find the instruction set and continue with `orizu instructions`.
|
|
14
30
|
|
|
15
31
|
---
|
|
16
32
|
|
|
@@ -30,7 +46,7 @@ The most common mistake teams make is jumping straight to evals before they unde
|
|
|
30
46
|
**Decision: should you even write a formal eval for this failure?**
|
|
31
47
|
- If you haven't observed it, no — do error analysis first.
|
|
32
48
|
- If the fix is one-shot and obvious, no — just fix it.
|
|
33
|
-
- If fixing it requires repeated iteration (
|
|
49
|
+
- If fixing it requires repeated iteration (component edits, retries, structural changes), yes — that's where evals shine.
|
|
34
50
|
|
|
35
51
|
---
|
|
36
52
|
|
|
@@ -154,13 +170,13 @@ There are three **types** of automated evals:
|
|
|
154
170
|
|
|
155
171
|
### In Orizu
|
|
156
172
|
|
|
157
|
-
This work is still authored by the agent in code, but Orizu
|
|
173
|
+
This work is still authored by the agent in code, but Orizu stores the versioned instruction, evaluator, and score artifacts:
|
|
158
174
|
|
|
159
175
|
1. Export labeled data: `orizu tasks export --task <id> --format jsonl --out labels.jsonl`
|
|
160
176
|
2. For each failure mode, choose code assertion or LLM-judge.
|
|
161
177
|
3. Build the judge.
|
|
162
178
|
4. Validate against the labels (train/dev/test split, TPR/TNR).
|
|
163
|
-
5.
|
|
179
|
+
5. Keep the subject application's instruction material in its instruction set. For an LLM judge, push the judge artifact and runner, register a scorer, then submit score runs for the set's profile versions or optimization candidates.
|
|
164
180
|
|
|
165
181
|
Control-plane commands: `prompt-control-plane.md`. Detailed authoring walkthrough — code assertion patterns, LLM-judge prompt scaffold, train/dev/test split, TPR/TNR computation, saturation checks: `building-judges.md`.
|
|
166
182
|
|
|
@@ -181,7 +197,7 @@ Done locally, reported to Orizu:
|
|
|
181
197
|
1. Package the candidate execution as a runner, or use the customer's existing local app wrapper.
|
|
182
198
|
2. Register validated scorers.
|
|
183
199
|
3. Run the bundled Orizu GEPA-style text optimizer, or a custom optimizer against the scorer set.
|
|
184
|
-
4. Stream optimization events to Orizu, promote accepted candidates, and submit comparable scores.
|
|
200
|
+
4. Stream optimization events to Orizu, promote accepted candidates into the target instruction-set profile, and submit comparable scores.
|
|
185
201
|
5. Diff before/after on the eval suite. Ship if it holds; new traces feed back to step 1.
|
|
186
202
|
|
|
187
203
|
Control-plane commands: `prompt-control-plane.md`. Detailed walkthrough — GEPA mechanics, optional DSPy context for customers already using it, and before/after comparison: `optimization-with-gepa.md`.
|